求助:关于多线程问题
我有如下代码,实现多个线程按时间片执行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的时候,那么说明你的设计就有问题。