黑马程序员技术交流社区
标题:
关于线程同步锁的问题?
[打印本页]
作者:
张庚
时间:
2013-2-6 11:47
标题:
关于线程同步锁的问题?
class Ticket implements Runnable//extends Thread
{
private int num = 100;
Object obj = new Object();
//这个对象锁放在里面和放在外面有什么区别 ,没怎么听清楚,求解释。。
public void run()
{
//Object obj = new Object();
while(true)
{
synchronized(obj)
{
if(num>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+".....sale...."+num--);
}
}
}
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();//创建一个线程任务对象。
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
/*
Ticket t1 = new Ticket();
// Ticket t2 = new Ticket();
// Ticket t3 = new Ticket();
// Ticket t4 = new Ticket();
t1.start();
t1.start();//一个线程不能开启两次,会抛出无效线程状态异常
t1.start();
t1.start();
*/
}
}
作者:
王晓明
时间:
2013-2-6 13:28
说的简单一点就是对象锁放在外面的话,下面4个线程使用的话就是同一把锁,而放在里面的话,那就是4个线程各自有一把锁!
为什么?因为在里面的话,每一个抢到运行时间的线程都会new一个自己的Object对象锁,虽然都是Object的锁,对象名也一样,但实际却不一样,还是会出现线程安全问题!
但是如果放在外面的话,那这个对象锁就是共有的!4个线程就会同用这把锁,保证了线程的安全!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2