假期学习25

第25天:多线程(下)
对应章节:第13章(后半部分)
(1)今天做了什么: synchronized互斥锁:修饰方法(实例方法锁this,静态方法锁Class对象)、修饰代码块(可指定锁对象,粒度更细)。wait/notify/notifyAll线程通信(必须在synchronized块内调用,否则抛IllegalMonitorStateException):wait释放锁并等,notify随机唤醒一个等待同锁的线程,notifyAll全唤醒。Lock接口(ReentrantLock)提供:tryLock超时尝试、公平锁、多Condition(比synchronized一个锁一个等待集更灵活)。线程池:Executors快速创建固定/缓存/单线程池,ThreadPoolExecutor手动配核心线程数、最大线程数、存活时间、工作队列。volatile保证变量跨线程可见性(不保证原子性)。练习:用synchronized和Lock两种方式各写一次生产者-消费者模型;固定3线程池处理10个任务。
(2)明天准备做什么: 学习第14章网络编程——TCP/IP基础,InetAddress,ServerSocket/Socket的TCP编程,DatagramSocket/DatagramPacket的UDP编程。练习实现多人聊天室(TCP+多线程)。
(3)遇到的问题: notify随机唤醒,如果等待队列中全是消费者只有一个生产者,notify可能唤醒了消费者导致都无法继续——notifyAll更安全但开销大。synchronized(obj)中obj必须是final或effectively final,不能用变动的引用。线程池的submit提交Callable有返回Future,execute提交Runnable无返回。volatile不能替代synchronized——它只保证可见性不保证原子性,i++操作(读-改-写三步)在多线程下仍不安全。

posted @ 2026-08-30 21:59  呱哒  阅读(9)  评论(0)    收藏  举报