/**
* 多线程共享数据:多个线程有可能同时处理同一个资源
* 同步:多个线程在同一时间段内只能有一个线程执行指定代码,其它线程要等此线程执行完成之后才可以继续执行
*/
/**
* 1.多线程共享数据时会发生线程不安全的情况
* 2.多线程共享数据必须使用同步
* 3.实现同步的三种方式:
* 1)同步代码块
* synchronized(要同步的对象){ 要同步的操作 }
* 2)同步方法
* private synchronized void method(){ 要同步的操作 }
* 3) 使用Lock(更灵活的代码控制)
* 使用同步可以解决安全问题,但同时会牺牲性能,所以同步的代码块要尽量保持简短,
* 把不随数据变化的相关代码移除同步快,不要阻塞
*/
<1>使用Lock
package com.vince;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadDemo4 {
public static void main(String[] args) {
MyRunnable5 mr5 = new MyRunnable5();
Thread t1 = new Thread(mr5);
Thread t2 = new Thread(mr5);
t1.start();
t2.start();
}
}
class MyRunnable5 implements Runnable{
private int ticket = 10;//售票
@Override
public void run() {
for(int