线程同步
被多个线程同时访问的资源叫做临界资源,当临界资源被多个线程同时访问的时候会出现一些隐患。
线程的同步就会为我们解决掉这一隐患。
下面列举一些多线程的隐患以及解决方法
public void run(){
while(true){
if(ticket>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"窗口"+(ticket--)+"张票");
}else{
break;
}
}
}
(只写了run方法里的代码)如果有两个线程同时执行会出现隔票或者出现0号票等问题
加上synchronized的同步代码块就可以避免出现错误了也可以把方法利用synchronized改成同步函数也是可以避免的。(把synchronized加到void前面)public void run(){ while(true){ //同步代码块 synchronized(this){ if(ticket>0){ try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"窗口"+(ticket--)+"张票"); }else{ break; } } } }