摘要: 死锁的出现: 商家(线程1):先给钱再给货 消费者(线程2):先给货再给钱 阅读全文
posted @ 2019-12-13 15:50 小小吸血鬼 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 1.让出线程yield()方法的使用 public void run(){ for(int i=1;i<=100;i++) { System.out.println(name+"下载了" + i + "%"); //让出线程 Thread.yield(); } } 2.守护线程setDaemon() 阅读全文
posted @ 2019-12-13 15:40 小小吸血鬼 阅读(142) 评论(0) 推荐(0) 编辑
摘要: join线程会抢先拿到cup来执行线程,然后其他的线程再来执行。 案例: public static void main(String args[]){ //创建线程对象 Thread myThread1 = new Thread(new MyRunnable("爱的供养")); Thread my 阅读全文
posted @ 2019-12-13 15:33 小小吸血鬼 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 1.三种优先级 (1)最高优先级:MAX_PRIORITY(10) (2)普通优先级:NORM_PRIORITY(5) (3)最低优先级:MIN_PRIORITY(1) 案例代码: public static void main(String args[]){ //创建一个线程对象 MyThread 阅读全文
posted @ 2019-12-13 15:26 小小吸血鬼 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 1.线程间通信的出现场景 模拟生产者-消费者案例说明: 生产者生成水果,如果水果没有被买走,那么就不生产处于等待状态,如果水果被消费者买走,这时候消费者就会通知生产者水果已买走请生产,消费者同理,如果水果已经生成出来,那么就买走,买走之后再通知生产者水果没了请生产 2.线程间通信的实现 通信规则 ( 阅读全文
posted @ 2019-12-13 15:13 小小吸血鬼 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 1.使用synchronized修饰代码块,使用语法如下: public class Ticket implements Runnable{ /**车票库存*/ int tickets = 100; /**创建一个锁对象,这个对象有多个线程共同使用*/ static Object obj = new 阅读全文
posted @ 2019-12-13 14:30 小小吸血鬼 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 1.线程并发的产生 这里举一个买票的经典案例:四个窗口售卖100涨车票,代码如下: public class Ticket implements Runnable{ /**线程名称*/ private String name; /**车票库存*/ static int tickets = 100; 阅读全文
posted @ 2019-12-13 14:04 小小吸血鬼 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 1.线程的执行原理 线程的并发执行通过多个线程不断的切换CPU的资源,这个速度非常快,我们感知不到,我们能感知到的就是三个线程在并发中的执行。 2.线程的生命周期 (1)新建:线程被new出来; (2)准备就绪:线程具有执行的资格,即线程调用了start()方法,没有执行的权利; (3)运行:具备执 阅读全文
posted @ 2019-12-13 11:22 小小吸血鬼 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 1.继承Thread类,子类要重写run()方法,如: public class MyThread extends Thread{ /** * 线程执行的逻辑体 */ @Override public void run(){ for(int i=1;i<=100;i++) { //this.getN 阅读全文
posted @ 2019-12-13 10:44 小小吸血鬼 阅读(143) 评论(0) 推荐(0) 编辑