提几个小问题。

时间:2022-05-08 17:34:45
提几个小问题。大家帮忙解答下,谢谢!!

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.

#2


问题3:用不用线程由你要做的项目有关,如果你要做的东西,不可能单线程,那么必然需要使用多线程。另外现在多核已经是必然的趋势,所以程序也应该要利用这个优势。所以多线程并发的编程是必须的。

问题4:都是线程方面的。你可以去看看java线程方面的书。

问题5:中文版可以google一下,sun官方网站也有,是sun自己翻译的。

#3


怎么没人回答 问题1 和 问题2 啊~~~??

#4


1. 使当前正在 CPU 上运行的线程让出运行机会给其它线程,有可能造成线程间的“切换”。(在协作式操作系统上用的比较多,比如手机的 OS 等,而在像 Windows XP 这样的抢占式操作系统上线程就是不调用 yield 方法当分给它的运行时间到了后它也会被别的线程强去运行机会的。)
2. 你猜的基本正确,调用 shutdown 之后,线程池不再接受新的任务,当已有的任务执行结束后,池中线程将终止生命。当不想再提交任务给 ExecutorService 时应该调用 shutdown 方法,否则池中线程将一直处于阻塞状态等待新任务的到来,如果池中线程有非守护线程,那么程序将有可能因此而不能当所有任务都执行完后正常退出。

#5


问题1: yield() 
          暂停当前正在执行的线程对象,并执行其他线程。
问题2: shutdown() 
          启动一次顺序关闭,执行以前提交的任务,但不接受新任务。

#6


引用楼主 llm0528 的帖子:
提几个小问题。大家帮忙解答下,谢谢!!

Java codepublicclassLiftOffimplementsRunnable {protectedintcountDown=10;//DefaultprivatestaticinttaskCount=0;privatefinalintid=taskCount++;publicLiftOff() {}publicLiftOff(intcountDown) {this.countDown=countDown;
  }publicString status() {return"#"+id+"("+(countDown>0?countDown :"Liftoff!")+"),";
  }publicvoidrun() {while(countDown-->0) {
      System.out…


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.

#2


问题3:用不用线程由你要做的项目有关,如果你要做的东西,不可能单线程,那么必然需要使用多线程。另外现在多核已经是必然的趋势,所以程序也应该要利用这个优势。所以多线程并发的编程是必须的。

问题4:都是线程方面的。你可以去看看java线程方面的书。

问题5:中文版可以google一下,sun官方网站也有,是sun自己翻译的。

#3


怎么没人回答 问题1 和 问题2 啊~~~??

#4


1. 使当前正在 CPU 上运行的线程让出运行机会给其它线程,有可能造成线程间的“切换”。(在协作式操作系统上用的比较多,比如手机的 OS 等,而在像 Windows XP 这样的抢占式操作系统上线程就是不调用 yield 方法当分给它的运行时间到了后它也会被别的线程强去运行机会的。)
2. 你猜的基本正确,调用 shutdown 之后,线程池不再接受新的任务,当已有的任务执行结束后,池中线程将终止生命。当不想再提交任务给 ExecutorService 时应该调用 shutdown 方法,否则池中线程将一直处于阻塞状态等待新任务的到来,如果池中线程有非守护线程,那么程序将有可能因此而不能当所有任务都执行完后正常退出。

#5


问题1: yield() 
          暂停当前正在执行的线程对象,并执行其他线程。
问题2: shutdown() 
          启动一次顺序关闭,执行以前提交的任务,但不接受新任务。

#6


引用楼主 llm0528 的帖子:
提几个小问题。大家帮忙解答下,谢谢!!

Java codepublicclassLiftOffimplementsRunnable {protectedintcountDown=10;//DefaultprivatestaticinttaskCount=0;privatefinalintid=taskCount++;publicLiftOff() {}publicLiftOff(intcountDown) {this.countDown=countDown;
  }publicString status() {return"#"+id+"("+(countDown>0?countDown :"Liftoff!")+"),";
  }publicvoidrun() {while(countDown-->0) {
      System.out…


1)线程在web开发中用到的不多,不过线程的机制还是需要了解的,因为应用服务器,数据库服务都用到线程机制,只是他们帮你开发好了而已
2)注解貌似我们项目中没用到,如果你讨厌xml配置文件的话,可以考虑用注解,不过个人认为没带来多大优势
3)google下,貌似很多

#7


好的,明白了。