作者Hiigara (西亚加拉)
看板java
标题Re: [问题] 新手Thread (执行绪问题)
时间Sat Dec 1 23:27:41 2012
※ 引述《TWTRubiks (阿哲)》之铭言:
: 想说老师还没教,就自己先看看,不过遇到了一些问题
: 以下为课本范例程式码:
http://pastebin.com/vMXvWb1m
结果好像没人回答问题 A...
// 这里我就有问题了Thread.currentThread(),我看书上写
// 类别方法,可以取得目前的执行绪物件s
// 老实说我不太懂他的意思
这里分成两个部份各自简单的来谈,什麽是执行绪,跟Java 的 Thread 物件
一个执行绪(也就是英文写作 thread 的那个东西)大致可以想成
「一件从头循序执行到尾的工作」
例如一个厨师依照食谱的说明做一道菜的过程。
而今天我可能程式(厨房)里面想要同时同时做两三件工作,於是可怜的厨师就得要
一边煮鱼翅一边削水果。
两个执行绪彼此是不同步的,不一定谁会先做完谁会後做完。
就像鱼翅什麽时候会烧焦跟水果削了几颗,这两者之间是没有直接关联的。
执行绪要讨论还有很多鬼东西,不过先知道到这里就好,剩下请洽恐龙本...
我绝对不会承认我只懂到这边(遮脸
Java 为了方便写程式的人管理多执行绪的程式,为程式设计师提供了一个 Thread 物件
管理执行续。当写程式的人 new 一个 Thread 出来,并且呼叫该 Thread 的 start(),
Java 会启动一个新的执行绪,并且用那个执行续来跑塞入的 Runnable 的 run()
可以看成 Java 把执行绪这件事情分成两个部份:
- Runnable: 执行绪实际要执行的工作物件
- Thread: 执行绪管理员物件
而 Thread.currentThread(),他的功能是「取得现在这个执行绪的管理员物件」
这边一个讨论上可能出现的陷阱是,当其他写 Java 的人讲「thread」的时候
可能是指「执行绪」这个概念,也可能是指 Java 的 Thread 物件
还不熟的时候要多花一点心力去分辨这两者
: 结果印出:
: 执行绪:Thread[main,5,main]
: Thread[执行绪 A,5,main]总和=15
: Thread[执行绪 B,5,main]总和=10
: //[执行绪 A,5,main] 这里面第1个 执行绪 A (是名称),那第2个"5"是指甚麽?!
: 而第3个 main是代表在主程式下执行?!
: 结果我打
: System.out.println("t1="+t1.toString());
: System.out.println("t2="+t2.toString());
: 竟然结果和
: System.out.println(Thread.currentThread());
: 2种写法几乎完全一样?!
Thread t = Thread.currentThread();
System.out.println(t)
会呼叫到 out 这个 PrintStream 的 println(Object o)。
而喂给 println() 的参数是物件的时候,印出来的东西就会是该物件的 toString()
回传的字串。
另,用字串跟某个物件相加的时候,结果也会是拿该字串跟物件的 toString() 吐出的
字串相接在一起的新字串
所以,不论是
System.out.println("执行绪: " + Thread.currentThread());
System.out.println("t2="+t2.toString());
System.out.println(Thread.currentThread());
最後结果印出来的东西中间都会有一段是该 Thread 物件的 toString() 的结果
於是你知道了,去找 Thread 的 toString() 的文件或许可以找到你要的答案
参照官方 Javadoc, Thread 的 toString()
http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#toString%28%29
Returns a string representation of this thread, including the thread's name,
priority, and thread group.
所以「Thread[main,5,main]」里面,括号里面的东西分别是
thread's name
priority
thread group
thread 的名称感觉很直觉,至於优先权跟群组....看起来像是上面没出现过的新名词
不过至少有方向可以查了,对吧 :P
例如说 google
「java thread priority」「java 执行绪 优先权」
「java thread group」「java 执行绪 群组」
就能找到关於「那是什麽」的资讯
然後你会发现一个晚上就这样不见了 :P
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.47.149.153
※ 编辑: Hiigara 来自: 114.47.149.153 (12/01 23:38)
1F:推 AtarashiAko:我觉得一个晚上应该不够吧XD 12/02 03:24