- /*
- 创建一个测试类,里面有两个A类对象,然后建立两个线程,分别给线程的构造器传参数
- th1(sj1,sj2),th2(sj2,sj1),再创建一个测试类,然后启动两个线程
- */
- public class DieLockTest {
- public static void main(String[] args) {
- ShuJu sj1=new ShuJu();
- ShuJu sj2=new ShuJu();
- Thread th1=new ThreadTest(sj1,sj2);
- Thread th2=new ThreadTest(sj2,sj1);
- th1.start();
- th2.start();
- }
- }
- //创建一个线程类,有两个属性,为A类属性,为线程类构造器传参数
- //重写run()方法,然后里面有一个A类的引用调用fun1(),参数为A类
- //对象
- class ThreadTest extends Thread{
- private ShuJu sj1;
- private ShuJu sj2;
- public ThreadTest(ShuJu sj1,ShuJu sj2){
- this.sj1=sj1;
- this.sj2=sj2;
- }
- public void run(){
- sj1.fun1(sj2);
- }
- }
- //定义一个数据类,里面有两个同步方法,为了实现死锁,让一个方法的参数为本类类型
- //然后为了使效果明显一些,我们使线程sleep一会
- class ShuJu{
- public synchronized void fun1(ShuJu sj){
- String str=Thread.currentThread().getName();
- System.out.println(str+" "+"準備死鎖");
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
-
- }
- sj.fun2();
-
- }
- public synchronized void fun2(){}
- }
复制代码 |