线程间的数据共享(共享同一个对象,对象锁)
文章目录
一、并发运行
二、串行运行
三、多线程的同步原理
四、死锁
一、并发运行
默认情况下线程是并发运行(指一个时间段中多个线程都处于已启动但没有运行结束的状态),抢占CPU 执行权,这种运行方式往往会出现交叉的情况。这种运行方式往往会出现交叉的情况
实例
public class Test {
public static void main(String[] args) {
new CounterThread("线程1").start();
new CounterThread("线程2").start();//抢占式运行,运行结果会出现交叉的情况
}
}
class CounterThread extends Thread{
public CounterThread(String threadName){
super(threadName);
}
@Override
public void run() {
for(int i=0;i<3;i++){
System.out.println(getName()+" : "+i);
}
}
}
运行结果
二、串行运行
为了避免交叉的情况,使一个线程结束了另一个线程才执行,即串行运行,需要通过对象锁机制来实现,synchronized就是一个利用锁实现线程同步的关键字
实例
public class Test {
public static void main(String[] args) {
Object showData = new Object();//多线程之间的数据共享
new CounterThread("线程1",showData).start();
new CounterThread("线程2",showData).start();//抢占式运行,运行结果会出现交叉的情况
}
}
class CounterThread extends Thread{
private Object showData;
pu