在之前的文章中,使用synchronized同步代码块, wait(); notify();解决了线程同步问题,那么除了这个办法,还可以使用lock锁。还是之前的例子:
lock用法如下:
Lock lock = new ReentrantLock();
lock.lock();
try{
//可能会出现线程安全的操作
}finally{
//一定在finally中释放锁
//也不能把获取锁在try中进行,因为有可能在获取锁的时候抛出异常
lock.ublock();
}
代码如下:
package com.newDemo.controller.test;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//共享资源
class Res{
public String userSex;
public String userName;
//线程通讯标识 (false 生产者线程写,消费者线程等待)(true 消费者线程读,生产者线程等待)
public boolean flag = false;
Lock lock = new ReentrantLock();
}
//生产者线程
class inputThreadS extends Thread{
Res res;
public inputThreadS(Res res){
this.res = res;
}
public void run(){
int count=0;
while(true){
try {
res.lock.lock();
if (count == 0) {
res.userName = "java";
res.userSex = "男";
} else {
res.userName = "php";
res.userSex = "女";