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

关于线程死锁跟重进入的小例子

2012-12-25 
关于线程死锁和重进入的小例子?package threadpublic class Test implements Runnable {public Object 吃

关于线程死锁和重进入的小例子

?

package thread;public class Test implements Runnable {public Object 吃西餐先拿;static Object 刀 = new Object();static Object 叉 = new Object();public static void main(String[] args) {ChildClass c = new ChildClass();c.f();System.out.println("不会死锁,这种机制叫重进入!");//--------重进入例子---------------//---------死锁例子---------------Test 丈夫 = new Test();Test 妻子 = new Test();丈夫.吃西餐先拿 = 刀;妻子.吃西餐先拿 = 叉;Thread t1 = new Thread(丈夫);Thread t2 = new Thread(妻子);t1.start();t2.start();}public void run() {if (吃西餐先拿 == 刀) {synchronized (刀) {try {Thread.sleep(500);} catch (InterruptedException e) {}synchronized (叉) {System.out.println("1");}}}if (吃西餐先拿 == 叉) {synchronized (叉) {try {Thread.sleep(500);} catch (InterruptedException e) {}synchronized (刀) {System.out.println("0");}}}}}class ParentClass extends Thread {public synchronized void f() {}}class ChildClass extends ParentClass {public synchronized void f() {super.f();}}

子类的重写同步方法f中又调用了父类的同步f方法 这时不会对调用的该对象死锁,可以理解为不会上第二个锁 也可以理解为第二把锁没有加上去。总而言之 sychronized关键字的本质是不让其他线程在同一对象上再上一把锁。

热点排行