同步synchronized方法无限等待问题与解决方案——T2218

package 对象及变量的并发访问2;

/**
 * 同步synchronized方法无限等待问题与解决方案
 *   但是还是没有解决A死循环的问题啊?
 *   只是锁了不同类。。。
 */

class ServiceT2218{
    synchronized public void methodA(){
        System.out.println("methodA begin");
        boolean isContinueRun =true;
        //制造资源一直被占有?
        while (isContinueRun){

        }
        System.out.println("methodA end");
    }

    synchronized public void methoB(){
        System.out.println("methodB begin");
        System.out.println("methodB end");
    }
}

class Service2T2218{
   Object object=new Object();
   public void MethodA(){
       synchronized (object){
           System.out.println("methodA begin");
           boolean isContinueRun=true;
           while (isContinueRun){

           }
           System.out.println("methodA end");
       }
   }

   Object object2=new Object();
   public void MethodB(){
       synchronized (object2){
           System.out.println("MethodB begin");
           System.out.println("MethodB end");
       }
   }
}
class MyThreadAT2218 extends Thread{
    private ServiceT2218 serviceT2218;

    public MyThreadAT2218(ServiceT2218 serviceT2218){
        super();

        this.serviceT2218=serviceT2218;
    }

    @Override
    public void run() {
        serviceT2218.methodA();
    }
}

class MyThreadA2T2218 extends Thread{
   private Service2T2218 service2T2218;

   public MyThreadA2T2218(Service2T2218 service2T2218){
       super();
       this.service2T2218=service2T2218;
   }

    @Override
    public void run() {
        service2T2218.MethodA();
    }
}
class MyThreadBT2218 extends Thread{
    private ServiceT2218 serviceT2218;

    public MyThreadBT2218(ServiceT2218 serviceT2218){
        super();
        this.serviceT2218=serviceT2218;
    }

    @Override
    public void run() {
        serviceT2218.methoB();
    }
}

class MyThreadB2T2218 extends Thread{
    private  Service2T2218 service2T2218;

    public MyThreadB2T2218(Service2T2218 service2T2218){
        super();
        this.service2T2218=service2T2218;
    }

    @Override
    public void run() {
        service2T2218.MethodB();
    }
}
class RunT2218{
    public RunT2218(){
        ServiceT2218 serviceT2218=new ServiceT2218();

        MyThreadAT2218 at2218=new MyThreadAT2218(serviceT2218);
        at2218.setName("A");
        at2218.start();

        MyThreadBT2218 bt2218=new MyThreadBT2218(serviceT2218);
        bt2218.setName("B");
        bt2218.start();
    }
}

class Run2T2218{
    public Run2T2218(){
        Service2T2218 service2T2218=new Service2T2218();

        MyThreadA2T2218 a2T2218=new MyThreadA2T2218(service2T2218);
        a2T2218.setName("A2");
        a2T2218.start();

        MyThreadB2T2218 b2T2218=new MyThreadB2T2218(service2T2218);
        b2T2218.setName("B2");
        b2T2218.start();
    }
}
public class T2218 {
    public static void main(String[] args) {
        //RunT2218 runT2218=new RunT2218();

        Run2T2218 run2T2218=new Run2T2218();
    }
}

RunT2218 runT2218=new RunT2218();在这里插入图片描述
Run2T2218 run2T2218=new Run2T2218();
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值