线程
小玉程序员
新手小玉,请多多关照
展开
-
生产者消费者案例
场景介绍现有一个肯德基餐厅,厨师负责生产出汉堡,顾客想要吃掉汉堡。有固定的五个仓位,每个仓位可以放置一个汉堡。当仓位满了之后厨师无法继续烹饪汉堡,只能等待顾客用膳。当仓位中都没有汉堡的情况下,顾客无汉堡可吃,只能等待厨师烹饪以上场景便是经典的生产者消费者案例,在《计算机操作系统》这门课中会有所涉及,该场景涉及线程的同步问题。图解代码实现package com.design;public class TestDemo { public static void main(Str原创 2021-11-22 10:40:28 · 551 阅读 · 0 评论 -
Lock锁
Lock锁的引入Lock锁引入自java.util.concurrent.locks.ReentrantLockjava.util.concurrent简称juc包下如果要实现线程同步,可以用三种方式来实现,其性能排行为Lock锁>synchronized代码块>synchronized方法LockDemopackage com.design;import java.util.concurrent.locks.ReentrantLock;public class LockDe原创 2021-11-22 09:34:55 · 341 阅读 · 0 评论 -
DeadLock死锁问题
死锁是什么?Java中死锁是多个线程互相持有对方需求的锁却又不肯释放掉自己锁持有的锁。所造成的程序暂停。就如同两个人分别拿枪指着对方的脑袋,并要求对方先放下枪,自己才肯放下枪,如果没有一个人做出让步,则僵持不下的状态会一直持续下去。死锁Demopackage com.design;public class DeadLockDemo extends Thread { public static void main(String[] args) { Children ming原创 2021-11-22 09:00:07 · 267 阅读 · 0 评论 -
synchronized
synchronized修饰方法在前面的博客中我向大家展示了线程不安全的案例以及可能造成的危害,今天给大家讲解防止危险的方法。我们可以使用synchronized关键字来修饰变量或方法修饰方法之后,方法体中的this指针所指对象会被标记为同步对象。此时其他对象访问该对象会进入阻塞状态,只有对象被访问结束才会释放资源。显而易见的是这种行为无疑会消耗更多的资源,并降低程序的执行效率。package com.UnSafeDemo;public class sellTickets extends Th原创 2021-11-22 00:24:50 · 111 阅读 · 0 评论 -
线程不安全案例
案例一:自动售票机package com.UnSafeDemo;public class sellTickets extends Thread{ @Override public void run() { sell(); } private int tickets = 3; public static void main(String[] args) { sellTickets machine = new sellTicket原创 2021-11-21 20:29:04 · 708 阅读 · 0 评论 -
Daemon_守护线程
守护线程的特点线程分为用户线程和守护线程程序必须等待用户线程结束程序无需等待守护线程结束典型的守护线程有,后台操纵日志,监控内存,GC垃圾回收守护线程的Demo展示public class DaemonDemo { public static void main(String[] args) { Thread thread1 = new Thread(new People()); Thread thread2 = new Thread(new God(原创 2021-11-21 19:16:57 · 486 阅读 · 0 评论 -
线程的优先级
阅读Thread源码阅读Thread的源码我们可以发现 public final static int MIN_PRIORITY = 1; /** * The default priority that is assigned to a thread. */ public final static int NORM_PRIORITY = 5; /** * The maximum priority that a thread can have.原创 2021-11-20 15:21:46 · 616 阅读 · 0 评论 -
线程状态的观察方式
Thread的六中状态Thread类下有一个枚举enum类型的变量State,共有六个值 public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }NEW对应创建状态。RUNNABLE对应就绪状态原创 2021-11-20 14:31:22 · 395 阅读 · 1 评论 -
线程强制执行_join
join可被理解成线程的插队join是Thread的静态方法,调用后可将线程强制执行,且只有在该线程执行完毕之后其他线程才可继续调用join方法有可能会抛出异常应给予try-catch环绕package com.design;public class JoinDemo implements Runnable{ @Override public void run() { System.out.println("vip开始插队"); for (int原创 2021-11-20 13:54:09 · 125 阅读 · 0 评论 -
Java线程礼让_yield
线程礼让_yield的本质礼让的本质就是让线程从运行状态重新编程就绪状态调用yield之后是否能礼让成功有时要看CPU心情,因为一旦进入就绪状态很可能又立刻进入运行状态线程礼让_yield的案例package com.design;public class yielddemo implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().g原创 2021-11-20 12:07:12 · 169 阅读 · 0 评论 -
Java线程的休眠
Java线程的休眠线程的休眠使用的是Thread类的静态方法sleep可以传入一个参数,参数为休眠的毫秒数。1秒等于1000ms调用sleep方法时可能会出现InterruptedException异常使用线程的休眠来模拟实现时钟功能package com.design;import java.text.SimpleDateFormat;import java.util.Date;public class clock { public static void main(原创 2021-11-20 11:49:39 · 2213 阅读 · 0 评论 -
Java线程停止
线程的状态分为五种新生状态就绪状态运行状态阻塞状态死亡状态Java中线程状态的解释在Java中,当一个线程被new关键字所创建,就进入了新生状态。当该线程被start()方法调用,则进入就绪状态,但并不意味着线程的立刻执行。当线程进入运行状态,才开始执行run方法体中的代码。当调用线程的sleep,wait,或同步锁定时,便进入阻塞状态,代码将不会继续进行。当阻塞解除事件发生时,将进入就绪状态。线程死亡则进入死亡状态,一旦进入死亡状态则不能继续启动线程。这里要重点说明的是线程的原创 2021-11-20 11:30:38 · 134 阅读 · 0 评论