2.2.7多个线程调用同一个方法是随机的
来源:互联网 发布:数据安全保密制度 编辑:程序博客网 时间:2024/06/16 05:43
package cha02.execise18;import java.util.ArrayList;import java.util.List;/** * Created by sunyifeng on 17/9/25. */public class MyList { private List list = new ArrayList<Object>(); synchronized public void add(String username) { System.out.println("线程" + Thread.currentThread().getName() + "执行了add方法"); list.add(username); System.out.println("线程" + Thread.currentThread().getName() + "退出了add方法"); } synchronized public int getSize() { System.out.println("线程" + Thread.currentThread().getName() + "执行了get方法"); int sizeValue = list.size(); System.out.println("线程" + Thread.currentThread().getName() + "退出了get方法"); return sizeValue; }}
package cha02.execise18;/** * Created by sunyifeng on 17/9/25. */public class ThreadA extends Thread { private MyList myList; public ThreadA(MyList myList) { super(); this.myList = myList; } @Override public void run() { for (int i = 0; i < 100; i++) { myList.add("threadA" + (i + 1)); } }}
package cha02.execise18;/** * Created by sunyifeng on 17/9/25. */public class ThreadB extends Thread { private MyList myList; public ThreadB(MyList myList) { super(); this.myList = myList; } @Override public void run() { for (int i = 0; i < 100; i++) { myList.add("threadB" + (i + 1)); } }}
package cha02.execise18;/** * Created by sunyifeng on 17/9/25. */public class Test { public static void main(String[] args) { MyList myList = new MyList(); // ThreadA threadA = new ThreadA(myList); threadA.setName("A"); threadA.start(); // ThreadB threadB = new ThreadB(myList); threadB.setName("B"); threadB.start(); }}
运行结果:线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程A执行了add方法
线程A退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程B执行了add方法
线程B退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程A执行了add方法
线程A退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
线程B执行了add方法
线程B退出了add方法
程序说明:
同步块中的代码是同步打印的,当前线程的执行与退出都是成对出现,但是线程A、线程B的执行是异步的,这就可能出现脏读的情况。
- 2.2.7多个线程调用同一个方法是随机的
- 多个线程调用同一个线程函数的方法
- 多个线程调用同一个线程函数
- java中,多个线程同时调用同一个静态方法的问题
- 多个脚本调用同一个函数的方法
- 多个按钮调用同一个方法
- 每个线程调用的是同一个ThreadTest对象
- 多个线程调用同一个处理函数的互斥问题
- 2.2.9同一个类的不同静态方法不同实例不同线程是同步的
- Java中线程的同步方法(线程必须是同一个同步方法)
- Handler默认情况下与调用它的Activity是处于同一个线程的实例证明
- 如何保证多个对象操作的是同一个资源?
- 同一个service调用多个dao的事务问题
- springmvc结果的转发和重定向 (需求:在同一个请求中调用多个方法) (13)
- 是启动线程和调用线程的run方法
- 多个.Net程序共用同一个config文件的方法
- 2.2.7多线程调用同一个方法出现脏读
- 多个Button使用同一个事件处理方法时判断是哪个Button发生了事件
- 出现次数超过一半的数
- 雪碧图/精灵图
- Eclipse创建Maven Web Project
- 银行家算法
- C语言——推箱子
- 2.2.7多个线程调用同一个方法是随机的
- master的schedule()方法解读
- HDU
- PlusOne 加一
- MapReduce实现CommonJoin和MapJoin
- 匹配追踪算法(MP)简介
- 责任链模式
- 2017.10.11 noip模拟赛 总结
- 小知识笔记