2021版Java多线程教程
全集
代码
Task.class
package main;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class Task implements Runnable {
/**
* 互斥锁
*/
private final ReadWriteLock rwl = new ReentrantReadWriteLock();
/**
* 读锁
*/
private final Lock r = rwl.readLock();
/**
* 写锁
*/
private final Lock w = rwl.writeLock();
/**
* 标识
*/
public boolean flag = true;
@Override
public void run() {
// 当标识为true时
if (flag) {
// 获取读锁
r.lock();
try {
// 输出当前线程名称
System.out.println(Thread.currentThread().getName());
// 使当前线程休眠3秒钟
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 释放读锁
r.unlock();
}
} else {
// 获取写锁
w.lock();
try {
// 输出当前线程名称
System.out.println(Thread.currentThread().getName());
} finally {
// 释放写锁
w.unlock();
}
}
}
}
Main.class
package main;
public class Main {
public static void main(String[] args) {
// 创建任务
Task task = new Task();
// 创建线程
Thread thread0 = new Thread(task);
Thread thread1 = new Thread(task);
// 启动线程
thread0.start();
try {
// 使主线程休眠1秒钟
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 将标识设置为false
task.flag = false;
// 启动线程thread1
thread1.start();
}
}
1118

被折叠的 条评论
为什么被折叠?



