两个线程,一个打印字母,一个打印数字,交替打印
总结
wait-notify
必须在synchronized
块中才能生效,一定是先 notify
再 wait
,线程代码执行时要先获取锁才能执行代码,比如 A 线程调用 lock.notify()
方法调用后,提示其他 wait
在lock
锁对象上的线程准备抢锁,A线程调用lock.wait()
方法后才释放锁,然后抢到锁的线程才能继续执行。
- 内部类可以使用外部类的
final
修饰的变量和外部类静态变量。原因是,内部类要保证使用的变量在内部类对象生命周期内都是存活的,并且不会改变。内部类编译成class
文件时会把引用的外部成员变量作为构造器入参。总之,内部类可以使用外部类 final 修饰的成员变量和
外部静态变量
。
测试代码
package org.blue.algs.thread;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.LockSupport;
import java.util.concurrent.locks.ReentrantLock;
/**
* 两个线程,一个打印字母,一个打印数字,交替打印
*
*/
public class PringAand1 {
public static void main(String[] args) throws Exception {
// new UseWaitNotify().run();
// new LockSupportTask().run();
// new ReentrantLockTask().run();
// new SemaphoreTask().run();
new BLockingQueueTask().run();
}
/**
* wait - notify 实现
*/
static class UseWaitNotify {
Object lock = new Object();
int cnt = 0;
public void run() throws Exception {
new Thread(()-> {
char c &#