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();
}
}
多个锁就是异步执行——T2209
最新推荐文章于 2022-06-03 23:13:35 发布