解决多线程访问数据的第一种方法:
1、线程同步机制__Synchronized关键字
多线程访问共享数据,就会出现安全性问题。
解决的办法之一:就是加锁同步代码块
<1>参数为任意对象
<2>加在方法内
2、Synchronized关键字加锁的缺点
<1>、频繁判断锁对象存在与否
<2>、频繁获取锁,释放锁
3、代码实现
public class myThread implements Runnable {
//syncronized关键字只能加在方法内,且要有一个锁对象
//1、创建锁对象
Object object = new Object();
//2、创建票数
int ticket = 100;
@Override
public void run() {
//3、多个线程共访,就给他们一个进入方法体的条件
while (true){
synchronized (object){
//4、判断票数剩余情况
if(ticket>0){
//5、让线程休眠,不然其他线程拿不到对象购买
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在买第"+ ticket +"张票");
}
ticket--;
}
}
}
}
public class lockDemo01 {
public static void main(String[] args) {
myThread myThread = new myThread();
Thread thread1 = new Thread(myThread);
Thread thread2 = new Thread(myThread);
Thread thread3 = new Thread(myThread);
thread1.start();
thread2.start();
thread3.start();
}
}