public class LiftOff implements Runnable {
protected int countDown = 10; // Default
private static int taskCount = 0;
private final int id = taskCount++;
public LiftOff() {}
public LiftOff(int countDown) {
this.countDown = countDown;
}
public String status() {
return "#" + id + "(" +
(countDown > 0 ? countDown : "Liftoff!") + "), ";
}
public void run() {
while(countDown-- > 0) {
System.out.print(status());
Thread.yield(); //问题1:这里的 yield()方法,主要是用来切换线程的咯?
}
}
}
import java.util.concurrent.*;
public class CachedThreadPool {
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
for(int i = 0; i < 5; i++)
exec.execute(new LiftOff());
exec.shutdown(); //问题2:这个 shutdown() 一直搞不懂什么意思。按JDK上的理解是,运行上面 execute()方
//法,并且执行完关闭,不接受新任务。也就是说只有在调用 shutdown() 方法后,之前的 execute() 才真正执行,而
//上面的循环,是不是将任务传到 execute() 的一个容器中(我猜的)?
}
}
问题3:书上说并发这东西很多不确定因素,那一般大家编程的时候使用线程吗?
问题4:有谁知道,注解这节知识是使用在什么方面的?
问题5:类库中 com.sun.* 包中的类库 JDK 全是英文的,球这个类库的中文版。
7 个解决方案
#1
问题3: If you know well on Thread, you can use it freely...
问题4: About Thread
问题5: http://topic.csdn.net/u/20080905/12/a48eeb5a-68b9-4609-8c52-17829e51e454.html
There are some links to Chinese Edition.
问题4: About Thread
问题5: http://topic.csdn.net/u/20080905/12/a48eeb5a-68b9-4609-8c52-17829e51e454.html
There are some links to Chinese Edition.
#2
问题3:用不用线程由你要做的项目有关,如果你要做的东西,不可能单线程,那么必然需要使用多线程。另外现在多核已经是必然的趋势,所以程序也应该要利用这个优势。所以多线程并发的编程是必须的。
问题4:都是线程方面的。你可以去看看java线程方面的书。
问题5:中文版可以google一下,sun官方网站也有,是sun自己翻译的。
问题4:都是线程方面的。你可以去看看java线程方面的书。
问题5:中文版可以google一下,sun官方网站也有,是sun自己翻译的。
#3
怎么没人回答 问题1 和 问题2 啊~~~??
#4
1. 使当前正在 CPU 上运行的线程让出运行机会给其它线程,有可能造成线程间的“切换”。(在协作式操作系统上用的比较多,比如手机的 OS 等,而在像 Windows XP 这样的抢占式操作系统上线程就是不调用 yield 方法当分给它的运行时间到了后它也会被别的线程强去运行机会的。)
2. 你猜的基本正确,调用 shutdown 之后,线程池不再接受新的任务,当已有的任务执行结束后,池中线程将终止生命。当不想再提交任务给 ExecutorService 时应该调用 shutdown 方法,否则池中线程将一直处于阻塞状态等待新任务的到来,如果池中线程有非守护线程,那么程序将有可能因此而不能当所有任务都执行完后正常退出。
2. 你猜的基本正确,调用 shutdown 之后,线程池不再接受新的任务,当已有的任务执行结束后,池中线程将终止生命。当不想再提交任务给 ExecutorService 时应该调用 shutdown 方法,否则池中线程将一直处于阻塞状态等待新任务的到来,如果池中线程有非守护线程,那么程序将有可能因此而不能当所有任务都执行完后正常退出。
#5
问题1: yield()
暂停当前正在执行的线程对象,并执行其他线程。
问题2: shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
暂停当前正在执行的线程对象,并执行其他线程。
问题2: shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
#6
1)线程在web开发中用到的不多,不过线程的机制还是需要了解的,因为应用服务器,数据库服务都用到线程机制,只是他们帮你开发好了而已
2)注解貌似我们项目中没用到,如果你讨厌xml配置文件的话,可以考虑用注解,不过个人认为没带来多大优势
3)google下,貌似很多
#7
好的,明白了。
#1
问题3: If you know well on Thread, you can use it freely...
问题4: About Thread
问题5: http://topic.csdn.net/u/20080905/12/a48eeb5a-68b9-4609-8c52-17829e51e454.html
There are some links to Chinese Edition.
问题4: About Thread
问题5: http://topic.csdn.net/u/20080905/12/a48eeb5a-68b9-4609-8c52-17829e51e454.html
There are some links to Chinese Edition.
#2
问题3:用不用线程由你要做的项目有关,如果你要做的东西,不可能单线程,那么必然需要使用多线程。另外现在多核已经是必然的趋势,所以程序也应该要利用这个优势。所以多线程并发的编程是必须的。
问题4:都是线程方面的。你可以去看看java线程方面的书。
问题5:中文版可以google一下,sun官方网站也有,是sun自己翻译的。
问题4:都是线程方面的。你可以去看看java线程方面的书。
问题5:中文版可以google一下,sun官方网站也有,是sun自己翻译的。
#3
怎么没人回答 问题1 和 问题2 啊~~~??
#4
1. 使当前正在 CPU 上运行的线程让出运行机会给其它线程,有可能造成线程间的“切换”。(在协作式操作系统上用的比较多,比如手机的 OS 等,而在像 Windows XP 这样的抢占式操作系统上线程就是不调用 yield 方法当分给它的运行时间到了后它也会被别的线程强去运行机会的。)
2. 你猜的基本正确,调用 shutdown 之后,线程池不再接受新的任务,当已有的任务执行结束后,池中线程将终止生命。当不想再提交任务给 ExecutorService 时应该调用 shutdown 方法,否则池中线程将一直处于阻塞状态等待新任务的到来,如果池中线程有非守护线程,那么程序将有可能因此而不能当所有任务都执行完后正常退出。
2. 你猜的基本正确,调用 shutdown 之后,线程池不再接受新的任务,当已有的任务执行结束后,池中线程将终止生命。当不想再提交任务给 ExecutorService 时应该调用 shutdown 方法,否则池中线程将一直处于阻塞状态等待新任务的到来,如果池中线程有非守护线程,那么程序将有可能因此而不能当所有任务都执行完后正常退出。
#5
问题1: yield()
暂停当前正在执行的线程对象,并执行其他线程。
问题2: shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
暂停当前正在执行的线程对象,并执行其他线程。
问题2: shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
#6
1)线程在web开发中用到的不多,不过线程的机制还是需要了解的,因为应用服务器,数据库服务都用到线程机制,只是他们帮你开发好了而已
2)注解貌似我们项目中没用到,如果你讨厌xml配置文件的话,可以考虑用注解,不过个人认为没带来多大优势
3)google下,貌似很多
#7
好的,明白了。