package 对象及变量的并发访问2;
import java.util.ArrayList;
import java.util.List;
class MyOneListT2211{
private List liset=new ArrayList();
synchronized public void add(String date){
liset.add(date);
};
synchronized public int getSize(){
return liset.size();
}
}
class MyServiceT2211{
public MyOneListT2211 addServiceMethod(MyOneListT2211 listT2211,String date){
try {
synchronized (listT2211){
if(listT2211.getSize()<1){
Thread.sleep(2000);
listT2211.add(date);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return listT2211;
}
}
class MyThread1T2211 extends Thread{
private MyOneListT2211 listT2211;
public MyThread1T2211(MyOneListT2211 listT2211){
super();
this.listT2211=listT2211;
}
@Override
public void run() {
MyServiceT2211 myServiceT2211=new MyServiceT2211();
myServiceT2211.addServiceMethod(listT2211,"A");
}
}
class MyThread2T2211 extends Thread{
private MyOneListT2211 myOneListT2211;
public MyThread2T2211(MyOneListT2211 listT2211){
super();
this.myOneListT2211=listT2211;
}
@Override
public void run() {
MyServiceT2211 myServiceT2211=new MyServiceT2211();
myServiceT2211.addServiceMethod(myOneListT2211,"B");
}
}
class RunT2211{
public RunT2211() throws InterruptedException {
MyOneListT2211 myOneListT2211=new MyOneListT2211();
MyThread1T2211 thread1T2211 =new MyThread1T2211(myOneListT2211);
thread1T2211.setName("A");
thread1T2211.start();
MyThread2T2211 thread2T2111=new MyThread2T2211(myOneListT2211);
thread2T2111.setName("B");
thread2T2111.start();
Thread.sleep(6000);
System.out.println("listSize="+myOneListT2211.getSize());
}
}
public class T2211 {
public static void main(String[] args) throws InterruptedException {
RunT2211 runT2211=new RunT2211();
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7ac28d78866aa2a7bbf6cd2301df83cc.png)