什么是线程同步呢?
线程同步指的是多个线程操作同一个对象 ,如果不进行线程同步 将会报错
具体错误是 由于内存存储空间中
一块内存中存储的信息保持在同一时刻保持一致,但是被取走后信息会更新,
多个线程对于同一个对象进行操作后会导致重复错误
举个粒子
银行里面有100块钱 ,A,B 都看见有余额为100,都想取钱。
但是取钱有先来后到之说,不能够被取成负数
A取走了100块,同一时刻,B以为还有100,就取100块,因为内存是同一块所以会变成-100元 出现卡bug,为了不让银行亏钱,就需要线程同步 讲究一个先来后到之说。
关于线程同步对应的需要了解队列和锁的概念
队列的概念是指线程需要进行排队,排队后才能够对线程对象进行操作
锁的概念是指同一个对象在被线程操作时,会被锁定住,后续的对象是不能够在这一时刻,对线程对象进行操作。
以下程序已经是安全的程序了
重要的是在函数名之前加上关键字synchronized使得方法变得线程安全
synchronized默认锁定的是this的对象
package Thread;
public class UnsafeTicket implements Runnable{
int num=10;
boolean flag=true;
@Override
public void run() {
while(flag){
try {
piao();//调用piao()进行方法调用
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void piao() throws InterruptedException {
if(num<=0){
flag=false;return;}//此处需要return;否则还会执行后续
Thread.sleep(200);
if(Thread.currentThread().getName().equals(