黑马程序员技术交流社区
标题:
同步函数,把run改成同步为什么变成一个线程再跑
[打印本页]
作者:
daoyua
时间:
2014-1-9 22:07
标题:
同步函数,把run改成同步为什么变成一个线程再跑
本帖最后由 daoyua 于 2014-1-10 16:27 编辑
public synchronized void run(){
while(num>0){
if(num>0){
System.out.println(Thread.currentThread().getName()+"同步函数"+num);
num--;
}
}
}
class Test
{
public static void main(String args[])
{
Demo d1=new Demo();
Thread t1=new Thread(d1);
Thread t2=new Thread(d1);
t1.start();
t2.start();
}
}
作者:
daoyua
时间:
2014-1-9 22:09
代码重新发下class Demo implements Runnable
{
int num=100;
public synchronized void run(){
while(num>0){
if(num>0){
System.out.println(Thread.currentThread().getName()+"同步函数"+num);
num--;
}
}
}
}
class Test
{
public static void main(String args[])
{
Demo d1=new Demo();
Thread t1=new Thread(d1);
Thread t2=new Thread(d1);
t1.start();
t2.start();
}
}
作者:
wodenhaowzg
时间:
2014-1-10 04:25
你将run方法加上锁以后,在同一时间就只能一个线程去执行方法内的代码,并且执行完出来后其他线程才能进去。
你的while循环设置的条件是num>0。。就是说不论t1或t2哪个线程进来,肯定是输出完这100条语句才能出去,而外面的线程同时也进不来,就造成了一个线程在跑的假象。
其实t1和t2两个线程都启动了,只是在外面的线程没有机会执行循环内的代码了。
归根结底:while循环条件设置错误。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2