package com.fan.juc;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* 一:用于解决多线程安全问题的方式:
*
* synchronized:隐试锁
*
* 1 同步代码块
*
* 2 同步方法
*
* jdk1.5后:
* 同步锁:lock
* 注意是一个显示锁,需要通过lock()方法上锁,必须unlock()方法进行释放锁
* @author fanfan
*
*/
public class TestLock {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(ticket,"1号").start();
new Thread(ticket,"2号").start();
new Thread(ticket,"3号").start();
}
}
class Ticket implements Runnable{
private int tick = 100;
private Lock lock = new ReentrantLock();
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
lock.lock();
try {
while(tick>0){
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+--tick);
}
} finally {
// TODO: handle exception
lock.unlock();
}
}
}
}
TestLock
最新推荐文章于 2023-05-09 22:45:35 发布