thmain.javapublic class thmain{
    public thmain() {
    }
    public static void main(String[] s) {
          for(int i = 0 ; i < 20 ; i++){
            so t = new so(i);
            t.start();
          }
       
    }}
public class so  extends Thread{
   private int th_id; //线程ID
   private int totalnumber; //统计打印的次数
   
   private long startime = 0;
   private long difftime = 3600000; //1小时重新搜索1次
   private long currtime = 0;
   
   public so(int i) {
      th_id = i;
      totalnumber = 0;
    }   public void run() {
      startime = System.currentTimeMillis(); //计算开始的时间
      int i = 0;
      while(true){
          if(i==0){
            totalnumber ++;
            System.out.println("线程ID:" + th_id +"开始了... 打印了:"+totalnumber+"次");
          }
          i++;
          currtime = System.currentTimeMillis();
          if((currtime - startime)>difftime){
             startime = System.currentTimeMillis();
             i = 0;
          }
          
      }      
   }
   
}开始运行的时候,开启20个线程,但是在1小时后却只有部分线程执行了:System.out.println("线程ID:" + th_id +"开始了... 打印了:"+totalnumber+"次");
而部分线程始终没有执行请教为什么?

解决方案 »

  1.   

    在 class so 加上这个修饰符 synchronized 
      

  2.   

    看不出什么问题来。
    可能是你设的周期太长了,有的线程还没有机会打印,也有可能是System.out.println("线程ID:" + th_id +"开始了... 打印了:"+totalnumber+"次");有缓存的原因它没有输出来
    像楼上说的加个synchronized完全没有必要,因为这是各个线程自己干自己的没有同步的机会
      

  3.   

    你知道线程的执行顺序吗,呵呵
    平优先级的线程,执行顺序是随机的,有JVM管理,没有一定的顺序。高优先级的线程,其执行的几率会高,但不是肯定。
    main 本身就是一个线程,是主线程
      

  4.   

    你知道线程的执行顺序吗,呵呵
    平优先级的线程,执行顺序是随机的,有JVM管理,没有一定的顺序。
    高优先级的线程,其执行的几率会高,但不是肯定。
    main 本身就是一个线程,是主线程
    也有可能是你判断条件的原因
    多做测试试试
      

  5.   

    只有对共享资源的访问时,为了线程的安全性需要加:synchronized
      

  6.   

    1)与synchronized无关
    2)在你的while(...)中,加上sleep(...),给其它线程执行的机会,就不一样了。
      

  7.   

    在while(true)死循环里 加个 sleep(1000),让其他线程有机会强占资源. 
      

  8.   

    多线程难就难在它的不可控性,线程的执行顺序是随机的,优先级高的的只是获得运行的机会较优先级低的大罢了,它也不一定能优先运行,所以我个人认为设置优先级可能并不能解决问题,如果楼主只是为了测试,我想通过设置线程的sleep()或wait()应该可以实现大多数线程的输出。当然纯属个人观点,如有不足,还望指正。
      

  9.   

    D:\myjava>java thmain
    线程ID:0开始了... 打印了:1次
    线程ID:1开始了... 打印了:1次
    线程ID:2开始了... 打印了:1次
    线程ID:3开始了... 打印了:1次
    线程ID:4开始了... 打印了:1次
    线程ID:5开始了... 打印了:1次
    线程ID:6开始了... 打印了:1次
    线程ID:7开始了... 打印了:1次
    线程ID:8开始了... 打印了:1次
    线程ID:9开始了... 打印了:1次
    线程ID:10开始了... 打印了:1次
    线程ID:11开始了... 打印了:1次
    线程ID:12开始了... 打印了:1次
    线程ID:13开始了... 打印了:1次
    线程ID:14开始了... 打印了:1次
    线程ID:15开始了... 打印了:1次
    线程ID:16开始了... 打印了:1次
    线程ID:17开始了... 打印了:1次
    线程ID:18开始了... 打印了:1次
    线程ID:19开始了... 打印了:1次
    线程ID:0开始了... 打印了:2次
    线程ID:1开始了... 打印了:2次
    线程ID:2开始了... 打印了:2次
    线程ID:3开始了... 打印了:2次
    线程ID:4开始了... 打印了:2次
    线程ID:5开始了... 打印了:2次
    线程ID:6开始了... 打印了:2次
    线程ID:7开始了... 打印了:2次
    线程ID:8开始了... 打印了:2次
    线程ID:9开始了... 打印了:2次
    线程ID:10开始了... 打印了:2次
    线程ID:11开始了... 打印了:2次
    线程ID:12开始了... 打印了:2次
    线程ID:13开始了... 打印了:2次
    线程ID:14开始了... 打印了:2次
    线程ID:15开始了... 打印了:2次
    线程ID:16开始了... 打印了:2次
    线程ID:17开始了... 打印了:2次
    线程ID:18开始了... 打印了:2次
    线程ID:19开始了... 打印了:2次
    线程ID:0开始了... 打印了:3次
    线程ID:1开始了... 打印了:3次
    线程ID:2开始了... 打印了:3次
    线程ID:3开始了... 打印了:3次
    线程ID:4开始了... 打印了:3次
    线程ID:5开始了... 打印了:3次
    线程ID:6开始了... 打印了:3次
    线程ID:7开始了... 打印了:3次
    线程ID:8开始了... 打印了:3次
    线程ID:9开始了... 打印了:3次
    线程ID:10开始了... 打印了:3次
    线程ID:11开始了... 打印了:3次
    线程ID:12开始了... 打印了:3次
    线程ID:13开始了... 打印了:3次
    线程ID:14开始了... 打印了:3次
    线程ID:15开始了... 打印了:3次
    线程ID:16开始了... 打印了:3次
    线程ID:17开始了... 打印了:3次
    线程ID:18开始了... 打印了:3次
    线程ID:19开始了... 打印了:3次
    线程ID:0开始了... 打印了:4次
    线程ID:1开始了... 打印了:4次
    线程ID:2开始了... 打印了:4次
    线程ID:3开始了... 打印了:4次
    线程ID:4开始了... 打印了:4次
    线程ID:5开始了... 打印了:4次
    线程ID:6开始了... 打印了:4次
    线程ID:7开始了... 打印了:4次
    线程ID:8开始了... 打印了:4次
    线程ID:9开始了... 打印了:4次
    线程ID:10开始了... 打印了:4次
    线程ID:11开始了... 打印了:4次
    线程ID:12开始了... 打印了:4次
    线程ID:13开始了... 打印了:4次
    线程ID:14开始了... 打印了:4次
    线程ID:15开始了... 打印了:4次
    线程ID:16开始了... 打印了:4次
    线程ID:17开始了... 打印了:4次
    线程ID:18开始了... 打印了:4次
    线程ID:19开始了... 打印了:4次
    你的问题也许会出现 不过我没想明白 等待高手
      

  10.   

    LZ的那个difftime设的太长了,有些线程等了一个小时后,可能刚把i置为0,他的时间片到了,又轮到别的线程运行了
    把时间设短一点,比如1000毫秒,就能看到所有的线程都会有输出,只不过顺序会比较乱,有的线程输出三四次了,有的线程才输出一两次
      

  11.   

    下面这个是我的运行结果,好几个线程都是别的线程已经开始输出第三次了,他们才输出第二次。这是因为你的程序里面各个线程之间没有临界资源,不好做同步
    线程ID:0开始了... 打印了:1次
    线程ID:1开始了... 打印了:1次
    线程ID:3开始了... 打印了:1次
    线程ID:2开始了... 打印了:1次
    线程ID:4开始了... 打印了:1次
    线程ID:5开始了... 打印了:1次
    线程ID:6开始了... 打印了:1次
    线程ID:7开始了... 打印了:1次
    线程ID:8开始了... 打印了:1次
    线程ID:9开始了... 打印了:1次
    线程ID:10开始了... 打印了:1次
    线程ID:11开始了... 打印了:1次
    线程ID:12开始了... 打印了:1次
    线程ID:13开始了... 打印了:1次
    线程ID:14开始了... 打印了:1次
    线程ID:15开始了... 打印了:1次
    线程ID:16开始了... 打印了:1次
    线程ID:17开始了... 打印了:1次
    线程ID:18开始了... 打印了:1次
    线程ID:19开始了... 打印了:1次
    线程ID:1开始了... 打印了:2次
    线程ID:0开始了... 打印了:2次
    线程ID:3开始了... 打印了:2次
    线程ID:2开始了... 打印了:2次
    线程ID:5开始了... 打印了:2次
    线程ID:4开始了... 打印了:2次
    线程ID:7开始了... 打印了:2次
    线程ID:6开始了... 打印了:2次
    线程ID:8开始了... 打印了:2次
    线程ID:9开始了... 打印了:2次
    线程ID:6开始了... 打印了:3次
    线程ID:7开始了... 打印了:3次
    线程ID:4开始了... 打印了:3次
    线程ID:5开始了... 打印了:3次
    线程ID:3开始了... 打印了:3次
    线程ID:0开始了... 打印了:3次
    线程ID:2开始了... 打印了:3次
    线程ID:1开始了... 打印了:3次
    线程ID:19开始了... 打印了:2次
    线程ID:18开始了... 打印了:2次
    线程ID:18开始了... 打印了:3次
    线程ID:17开始了... 打印了:2次
    线程ID:16开始了... 打印了:2次
    线程ID:15开始了... 打印了:2次
    线程ID:14开始了... 打印了:2次
    线程ID:13开始了... 打印了:2次
    线程ID:12开始了... 打印了:2次
    线程ID:12开始了... 打印了:3次
    线程ID:11开始了... 打印了:2次
    线程ID:11开始了... 打印了:3次
    线程ID:10开始了... 打印了:2次
    线程ID:10开始了... 打印了:3次
    线程ID:18开始了... 打印了:4次
    线程ID:6开始了... 打印了:4次
    线程ID:7开始了... 打印了:4次
    线程ID:5开始了... 打印了:4次
    线程ID:4开始了... 打印了:4次
    线程ID:0开始了... 打印了:4次
    线程ID:3开始了... 打印了:4次
    线程ID:2开始了... 打印了:4次
    线程ID:1开始了... 打印了:4次
    线程ID:8开始了... 打印了:3次
    线程ID:8开始了... 打印了:4次
    线程ID:13开始了... 打印了:3次
    线程ID:14开始了... 打印了:3次
    线程ID:9开始了... 打印了:3次
    线程ID:9开始了... 打印了:4次
    线程ID:15开始了... 打印了:3次
    线程ID:15开始了... 打印了:4次
    线程ID:16开始了... 打印了:3次
    线程ID:16开始了... 打印了:4次
    线程ID:17开始了... 打印了:3次
    线程ID:17开始了... 打印了:4次
    线程ID:19开始了... 打印了:3次
    线程ID:19开始了... 打印了:4次
    线程ID:14开始了... 打印了:4次
    线程ID:13开始了... 打印了:4次
    线程ID:10开始了... 打印了:4次
    线程ID:12开始了... 打印了:4次
    线程ID:18开始了... 打印了:5次
    线程ID:11开始了... 打印了:4次
    线程ID:6开始了... 打印了:5次
    线程ID:0开始了... 打印了:5次
    线程ID:5开始了... 打印了:5次
    线程ID:3开始了... 打印了:5次
    线程ID:3开始了... 打印了:6次
    线程ID:7开始了... 打印了:5次
    线程ID:7开始了... 打印了:6次
    线程ID:2开始了... 打印了:5次
    线程ID:2开始了... 打印了:6次
    线程ID:4开始了... 打印了:5次
    线程ID:4开始了... 打印了:6次
    线程ID:1开始了... 打印了:5次
    线程ID:1开始了... 打印了:6次
    线程ID:8开始了... 打印了:5次
    线程ID:0开始了... 打印了:6次
    线程ID:5开始了... 打印了:6次
    线程ID:11开始了... 打印了:5次
    线程ID:0开始了... 打印了:7次
    线程ID:5开始了... 打印了:7次
    线程ID:4开始了... 打印了:7次
    线程ID:1开始了... 打印了:7次
    线程ID:7开始了... 打印了:7次
    线程ID:2开始了... 打印了:7次
    线程ID:3开始了... 打印了:7次
    线程ID:8开始了... 打印了:6次
    线程ID:18开始了... 打印了:6次
    线程ID:18开始了... 打印了:7次
    线程ID:17开始了... 打印了:5次
    线程ID:17开始了... 打印了:6次
    线程ID:16开始了... 打印了:5次
    线程ID:16开始了... 打印了:6次
    线程ID:19开始了... 打印了:5次
    线程ID:19开始了... 打印了:6次
    线程ID:10开始了... 打印了:5次
    线程ID:10开始了... 打印了:6次