一、线程同步的必要性
前面说的线程都是独立的,而且异步执行,也就是说每个线程都包含了运行时所需要的数据或方法,而不需要外部资源或方法,也不必关心其它线程的状态或行为。
但是经常有一些同时运行的线程需要共享数据,此时就需要考虑其他线程的状态和行为,否则就不能保证程序运行结果的正确性。
例子:可以运行下面这个例子看看运行逻辑中的错误
package cn.bdqn.demo01;
public class Site implements Runnable {
private int count=10;
private int num=0;
@Override
public void run() {
while(true){
if(count<=0){
break;
}
count--;
num++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"抢到第"+num+"张票,剩余"+count+"张票!");
}
}
}
public class Test {
public static void main(String[] args) {
Site site=new Site();
Thread thread1=new Thread(site,"逃跑跑");
Threa