本帖最后由 奋斗的小胖子 于 2014-2-11 20:26 编辑
我自己写了个死锁代码,发现线程调用的时候用run锁不上,用start才锁得什么?怎么回事?- /*建立一个死锁范例
- * 需求分析:1,首先要有多个线程
- * 2,应该有两个方法,分别互相嵌套加锁
- * 3,建立两把锁
- * */
- class synchronizedDemo
- {
- public static void main(String[] args)
- {
- DeadDemo d1=new DeadDemo(true);
- DeadDemo d2=new DeadDemo(false);
- Thread t1=new Thread(d1);
- Thread t2=new Thread(d2);
- // t1.start();
- // t2.start();
- t1.run();
- t2.run();
- }
- }
- class DeadDemo implements Runnable
- {
- //这里的flag要确保两个线程走不同的方法
- private boolean flag;
- //这里输入的不同值将确保线程访问不同的方法
- DeadDemo(boolean flag)
- {
- this.flag=flag;
- }
- @Override
- public void run()
- {
- while(true)
- {
- if(flag==true)
- {
- synchronized (Lock.lockA)
- {
- System.out.println("if------lockA");
- synchronized (Lock.lockB)
- {
- System.out.println("if------lockB");
- }
-
- }
- }
- else
- {
- synchronized (Lock.lockB)
- {
- System.out.println("else------lockB");
- synchronized (Lock.lockA)
- {
- System.out.println("else------lockA");
- }
- }
- }
- }
- }
-
- }
- //建立两把锁
- class Lock
- {
- public static Lock lockA=new Lock();
- public static Lock lockB=new Lock();
- }
复制代码
|