摘要: 产生死锁的四个必要条件: 1.互斥条件:一个资源每次只能被一个进程使用 2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放 3.不剥夺条件: 进程已获得的资源,在未使用之前,不能强行剥夺。 4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系 只要避免任意一个或多个条 阅读全文
posted @ 2020-10-14 15:48 IanW 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 两种用法: synchronized 方法和 synchronized 块 同步方法:public synchronized void method( int args){} 同步块 : synchronized(Obj){} synchronized 方法控制对“对象”的访问,每一个对象对应一把锁 阅读全文
posted @ 2020-10-14 14:36 IanW 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 礼让线程,让当前的正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态 让CPU重新调度,礼让不一定成功,看CPU心情 阅读全文
posted @ 2020-10-08 14:25 IanW 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2020-10-07 21:03 IanW 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 停止线程 不推荐使用JDK提供的stop()、destroy()方法。【已废弃】 推荐线程自己停止下来 建议使用一个标志位进行终止变量 当flag=false,则终止线程进行 //测试stop //1.建议正常停止 >利用次数,不建议使用死循环 //2.建议使用标志位——————>设置一个标记位 / 阅读全文
posted @ 2020-10-07 21:00 IanW 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 理解Function Interface(函数接口)是学习java8 lambda表达式的关键所在 函数式接口定义: 任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象 为什么要是用lambda表达式 避免匿名内部类定义过 阅读全文
posted @ 2020-10-07 16:31 IanW 阅读(105) 评论(0) 推荐(0) 编辑
摘要: package DemoThread; //静态代理总结 /** * 1.真实对象和代理对象都要实现统一接口 * 2.代理对象需要代理真实角色 *好处: * 1.代理对象可以做很多真实对象做不了的事情 * 2.真实对象专注做自己的事情 * */ public class StaticProxy { 阅读全文
posted @ 2020-10-06 13:37 IanW 阅读(104) 评论(0) 推荐(0) 编辑
摘要: package DemoThread; //模拟龟兔赛跑 public class TestThread03 implements Runnable{ //胜利者 private static String winner; @Override public void run() { for (int 阅读全文
posted @ 2020-10-05 14:43 IanW 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 继承Thread类 子类继承Thread类具备多线程能力 启动线程:子类对象.start() 不建议使用:避免OOP单继承局限性 实现Runnable接口 实现接口Runnable具有多线程能力 启动线程: 传入目标对象+Tread对象 .start() 推荐使用:避免单继承局限性,灵活方便,方便同 阅读全文
posted @ 2020-10-05 13:53 IanW 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 需要下载commons.io jar包 package DemoThread; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; 阅读全文
posted @ 2020-10-04 15:12 IanW 阅读(103) 评论(0) 推荐(0) 编辑