多个锁就是异步执行——T2209

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

import lombok.SneakyThrows;

/**
 * 多个锁就是异步执行
 *
 *   第一次结果看:“synchronized(非this对象x)同步代码块"格式进行同步操作,锁必须是同一个,如果不是
 *   同一个锁则运行结果就是异步调用,交叉运行。
 */
class ServiceT2290{
    private String usernameParam;
    private String passwordParam;

    public void setUsernamePassword(String usernameParam,String passwordParam){
        try {
            //进入该方法就会有一个实例
            String anyString =new String();

            synchronized (anyString){
                System.out.println("线程名:"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"进入同步代码块");
                usernameParam=usernameParam;
                Thread.sleep(3000);
                passwordParam=passwordParam;
                System.out.println("线程名:"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"离开同步代码块");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class Service2T2290{
    private String anyString =new String();

    public void a(){try {
        synchronized (anyString){
            System.out.println("a begin");
            Thread.sleep(3000);
            System.out.println("a end");
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    }

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

class MyThreadAT2290 extends  Thread{
    private ServiceT2290 serviceT2290;

    public MyThreadAT2290(ServiceT2290 serviceT2290){
        super();
        this.serviceT2290=serviceT2290;
    }

    @Override
    public void run() {
        super.run();
        serviceT2290.setUsernamePassword("a","aa");
    }
}

class MyThreadA2T2290 extends Thread{
    private Service2T2290 service2T2290;

    public MyThreadA2T2290(Service2T2290 service2T2290){
        super();
        this.service2T2290=service2T2290;
    }

    @Override
    public void run() {
        super.run();
        service2T2290.a();
    }
}

class MyThreadBT2290 extends Thread{
    private ServiceT2290 serviceT2290;

    public MyThreadBT2290(ServiceT2290 serviceT2290){
        super();
        this.serviceT2290=serviceT2290;
    }

    @Override
    public void run() {
        super.run();
        serviceT2290.setUsernamePassword("b","bb");
    }
}

class MyThreadB2T2290 extends Thread{
    private Service2T2290 service2T2290;

    public MyThreadB2T2290(Service2T2290 service2T2290){
        super();
        this.service2T2290=service2T2290;
    }

    @Override
    public void run() {
        super.run();
        service2T2290.b();
    }
}

class RunT2290{
    public RunT2290(){
        ServiceT2290 serviceT2290=new ServiceT2290();

        MyThreadAT2290 at2290=new MyThreadAT2290(serviceT2290);
        at2290.start();

        MyThreadBT2290 bt2290=new MyThreadBT2290(serviceT2290);
        bt2290.start();
    }
}

class Run2T2290{
    public Run2T2290(){
        Service2T2290 service2T2290=new Service2T2290();

        MyThreadA2T2290 a2T2290=new MyThreadA2T2290(service2T2290);
        a2T2290.setName("A");
        a2T2290.start();

        MyThreadB2T2290 b2T2290=new MyThreadB2T2290(service2T2290);
        b2T2290.setName("B");
        b2T2290.start();
    }
}
public class T2209 {
    public static void main(String[] args) {

        //RunT2290 runT2290=new RunT2290();
        Run2T2290 run2T2290=new Run2T2290();
    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值