![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
多线程
m0_47612857
喜欢绝对领域,自学入行,喜欢的讲师韩顺平,常去的网站哔哩哔哩和尚硅谷。
展开
-
JAVA线程通信 生产者/消费者用例
/** * 线程通信的应用:经典例题:生产者/消费者问题 * * 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品, * 店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员 * 会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品 * 了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。 * * 分析: * 1. 是否是多线程问题?是,生产者线程,消费者线程 *原创 2020-05-22 17:38:33 · 188 阅读 · 0 评论 -
JAVA线程通信
/** * 线程通信的例子:使用两个线程打印 1-100。线程1, 线程2 交替打印 * * 涉及到的三个方法: * wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。 * notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。 * notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。 * * 说明: * 1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或转载 2020-05-22 17:29:29 · 86 阅读 · 0 评论 -
JAVA线程Lock锁
import java.util.concurrent.locks.ReentrantLock;/** * 解决线程安全问题的方式三:Lock锁 --- JDK5.0新增 * * 1. 面试题:synchronized 与 Lock的异同? * 相同:二者都可以解决线程安全问题 * 不同:synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器 * Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock()) *转载 2020-05-22 16:10:14 · 105 阅读 · 0 评论 -
JAVA线程死锁
/** * 演示线程的死锁问题 * * 1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃, * 都在等待对方放弃自己需要的同步资源,就形成了线程的死锁 * * 2.说明: * 1)出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续 * 2)我们使用同步时,要避免出现死锁。 * * @author shkstart * @create 2019-02-15 下午 3:20 */public class ThreadTest { publi原创 2020-05-22 15:22:23 · 128 阅读 · 0 评论 -
JAVA线程安全单例设计模式之懒汉式
class Bank{ private Bank(){} private static Bank instance = null; public static Bank getInstance(){ //方式一:效率稍差// synchronized (Bank.class) {// if(instance == null){// instance = new Bank();//原创 2020-05-22 15:05:06 · 121 阅读 · 0 评论 -
JAVA线程同步方法
synchronized放在方法声明中,表示整个方法为同步方法。例如:public synchronized void show (String name){….}案例 Runnable:class Window3 implements Runnable { private int ticket = 100; @Override public void run() { while (true) { show();原创 2020-05-22 14:45:22 · 96 阅读 · 0 评论 -
JAVA线程同步代码块
语法:synchronized (同步监视器){ // 需要被同步的代码;}说明:操作共享数据的代码,即为需要被同步的代码共享数据,多个线程操作的变量同步监视器,俗称锁,任何一个对象都可以充当锁。要求, 各个线程使用同一个锁对象案例 Runnable:class Window1 implements Runnable{ private int ticket = 100; @Override public void run() { while(原创 2020-05-22 14:02:57 · 139 阅读 · 0 评论 -
JAVA线程的生命周期
标题JDK中用Thread.State类定义了线程的五种状态新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态, run()方法定义了线程的操作和功能阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执行,进入阻塞状态死亡:线程完成了它的全原创 2020-05-22 11:10:25 · 187 阅读 · 0 评论 -
JAVA线程的优先级
线程的优先级等级MAX_PRIORITY:10MIN _PRIORITY:1NORM_PRIORITY:5涉及的方法getPriority() :返回线程优先值setPriority(int newPriority) :改变线程的优先级说明线程创建时继承父线程的优先级低优先级只是获得调度的概率低,并非一定是在高优先级线程之后才被调用参考1 尚硅谷...原创 2020-05-22 10:58:51 · 114 阅读 · 0 评论 -
JAVA线程的方法
void start()启动线程,并执行对象的run()方法run()线程在被调度时执行的操作String getName()返回线程的名称void setName(String name)设置该线程名称static Thread currentThread()返回当前线程。在Thread子类中就是this,通常用于主线程和Runnable实现类static void yield()线程让步暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程若队列中没有同优先级的线程,忽原创 2020-05-22 10:40:43 · 75 阅读 · 0 评论 -
JAVA线程的创建
public class ThreadTest { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); }}/** * 多线程的创建,方式一:继承Thread类 * 1创建一个继承Tread的子类 * 2重写run() * 3创建实例对象 * 4通过此对象调用start() * @author kanglin */class MyThre原创 2020-05-15 21:43:19 · 120 阅读 · 0 评论