并发执行:
1、线程中并发指一个时间段中多个线程都处于已启动但没有运行结束的状态。
2、多个线程之间默认并发运行,这种运行方式往往会出现交叉的情况。
//交叉执行
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关键字:
synchronized是一个利用锁实现线程同步的关键字
//例一:
public class Test {
private static Object shareData = new Object();//多线程间共享的数据
public static void main(String[] args) {
new CounterThread("线程1",shareData).start();
new CounterThread("线程2",shareData).start();
}
}
class CounterThread extends Thread{
private Object shareData;
public CounterThread(String threadName,Object shareData){
super(threadName);
this.shareData = shareData;
}
@Override
public void run() {
synchronized (shareData) {//synchronized利用共享对象实现锁,先执行到这行代码的线程先拿到锁,先执行完锁内的代码
for (int i = 0; i < 3; i++) {
System.out.println(getName() + " : " + i);
}
}
}
}
为什么通过synchronized就能实现多线程间串