随笔分类 - 多线程
摘要:线程池 背景:经常创建和销毁,使用量特别大的资源,比如并发情况下的线程,对性能影响很大。 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁,实现重复利用,类似生活中的公共交通工具。 好处: 提高响应速度(减少了创建新线程的时间) 降低资源消耗(重复利用线程
        阅读全文
                
摘要:信号灯法_解决生产者消费者问题 添加一个标志位 代码: package multithreading.Advanced; public class TestPC2 { public static void main(String[] args) { TV tv = new TV(); new Pla
        阅读全文
                
摘要:管程法_解决生产者消费者问题 生产者:负责生产数据的模块(可能是方法,对象,线程,进程); 消费者:负责处理数据的模块(可能是方法,对象,线程,进程); 缓冲区:消费者不能直接使用生产者的数据,它们之间有个“缓冲区”生产者将生产好的数据放入缓冲区中,消费者从缓冲区拿出数据 代码: package m
        阅读全文
                
摘要:线程协作_生产者消费者问题 线程通信 应用场景:生产者消费者问题 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止 如果仓库中放有产品,则消费者可以将产品取走消费,
        阅读全文
                
摘要:Lock(锁) 从JDK 5.0开始,Java提供了更加强大的线程同步机制————通过显示定义同步锁对象来实现同步。同步锁使用Lock对象充当。 java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程
        阅读全文
                
摘要:死锁 多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形,某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题 死锁避免的方法:破坏大于等于一个,产生死锁的必要条件 产生死锁的四个必要条件: 互斥条件:
        阅读全文
                
摘要:测试JUC安全类型的集合:CopyOnWriteArrayList 代码: package multithreading.TestSynchronized; import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; import java.u
        阅读全文
                
摘要:同步方法 由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized方法和synchronized块 同步方法:public synchronized void metho
        阅读全文
                
摘要:线程不安全的三个案例 1. 不安全的买票 代码: package multithreading.UnSafe; // 不安全的买票 // 线程不安全,有负数 public class UnsafeBuyTicket { public static void main(String[] args) {
        阅读全文
                
摘要:线程同步(多个线程操作同一资源) 并发:同一对象被多个线程同时操作 上万人同时抢100张票 两个银行同时取钱 线程同步:(排队) 线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入对象的等待池形成队列,等待前面线程使用完毕,下一线程再使用 解决线程不安全的问题:队列+锁 由于同一进程的多
        阅读全文
                
摘要:守护线程_daemon 线程分为用户线程和守护线程 虚拟机必须确保用户线程(main)执行完毕 虚拟机不用等待守护线程(gc)执行完毕 如:后台记录操作日志,监控内存,垃圾回收等等 测试案例: package multithreading; // 测试守护线程 // 上帝守护你 public cla
        阅读全文
                
摘要:线程优先级_priority Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行 线程的优先级用数字表示,范围从1~10 Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread
        阅读全文
                
摘要:线程状态Thread.State 线程状态。线程可以处于下列状态之一: NEW 至今尚未启动的线程处于这种状态。 RUNNABLE 正在 Java 虚拟机中执行的线程处于这种状态。 BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态。 WAITING 无限期地等待另一个线程来执行某一特定操作
        阅读全文
                
摘要:线程强制执行_join Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞 可以想象为插队 测试案例: package multithreading; // 测试Join方法 // 想象为插队 public class TestJoin implements Runnable { @
        阅读全文
                
摘要:线程礼让_yield 礼让线程,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态 让cpu重新调度,礼让不一定成功!看CPU心情 测试案例: package multithreading; // 测试礼让线程 // 礼让不一定成功,看cpu心情 public class TestYi
        阅读全文
                
摘要:线程休眠_sleep sleep(时间)指定当前线程阻塞的毫秒数; sleep存在异常InterruptedException; sleep时间到达后线程进入就绪状态; sleep可以模拟网络延时,倒计时等; 每一个对象都有一个锁,sleep不会释放锁; 模拟网络延时: package multit
        阅读全文
                
摘要:停止线程 不推荐使用JDK提供的stop(),destroy()方法——已废弃 推荐线程自己停下来 建议使用一个标志位进行终止变量,当flag=false,则终止线程 代码实现: package multithreading; // 测试stop // 1.建议线程正常停止——>利用次数,不建议死循
        阅读全文
                
摘要:线程底部实现原理:静态代理模式 案例: package multithreading; import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; // 静态代理模式总结 // 真实对象和代理对象都要实现同一接口 // 代理对象要代理真实角色 
        阅读全文
                
                    
                
浙公网安备 33010602011771号