首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于多线程有关问题

2012-01-07 
求助:关于多线程问题我有如下代码,实现多个线程按时间片执行index减1,直到为0就跳出来,请问synchronized(t

求助:关于多线程问题
我有如下代码,实现多个线程按时间片执行index减1,直到为0就跳出来,请问synchronized(this)是否可以写在while(true)的前面,为什么?this在这里具体表示什么?

class   PrimeThread   implements   Runnable{
                  int   index;
                  PrimeThread(int   index)   {
                          this.index=index;
                  }

                  public   void   run()   {              
                       
                        while(true){
                        synchronized(this){
                        index--;
                        if(index> 0)
                        {
                        try{
                        Thread.sleep(10);
                              }
                        catch(Exception   e)
                        {
                        e.printStackTrace();
                        }
                            System.out.println( "PrimeThread "+ ": "+Thread.currentThread().getName()+ "   index= "+index);
                      }
                      else  
                              break;
                                                                }
                                              }
               
            }
}

class   ThreadTest{
public   static   void   main(String[]   args)
{
PrimeThread   pt=new   PrimeThread(300);
new   Thread(pt).start();
new   Thread(pt).start();
new   Thread(pt).start();

System.out.println( "Main "+ ": "+Thread.currentThread().getName());

}
}

[解决办法]
可以写在while前面的,但是那样写的话你这段代码就失去了并发的意义。
synchronized(this)中的this表示这段同步代码块的同步锁。


[解决办法]
synchronized代码块里的都会被同步执行,整个run方法体都被synchronized的时候,那么说明你的设计就有问题。

热点排行
Bad Request.