多线程
多线程的学习
Sky-木落
程序猿!热爱编程、旅行、摄影、轻音乐等、
展开
-
两个线程交替打印输出的各种写法
方式一:使用LockSupportpackage com.muluo.test1013;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.LockSupport;import java.util.concurrent.locks.ReentrantLock;/** * 代码测试 * @author Muluo * @create 2021-10-13 15:28:56 */public原创 2021-10-13 19:58:00 · 243 阅读 · 0 评论 -
多线程下载器项目实战
目录结构源代码Constant.classpackage com.muluo.constant;/** * 常量类 * @author Muluo * @create 2021-06-15 16:34 */public class Constant { /** * 文件下载的存储位置 */ public static final String PATH = "D:\\"; /** * 文件下载单位 */ pub原创 2021-06-17 16:33:58 · 236 阅读 · 1 评论 -
线程中死锁的问题
1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁2.说明:1出现死锁后,不会出现异常,不会出现提示,只是所的线程都处于阻塞状态,无法继续2我们使用同步时,要避免出现死锁。3.举例:public static void main(String[] args) { StringBuffer s1 = new StringBuffer(); StringBuffer s2 = new StringBuffer();原创 2021-01-24 16:42:43 · 143 阅读 · 0 评论 -
线程通信经典问题:消费者/生产者问题
1. 消费者/生产者问题 实例代码演示package Thread;/** * @author Muluo * @create 2021-01-19 21:01 */class Clerk{ private int productCount = 0; // 生产产品 public synchronized void produceProduct() { if (productCount < 20) { productCoun原创 2021-01-19 21:31:34 · 124 阅读 · 0 评论 -
线程的通信
1、线程通信涉及到的三个方法:wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。2、说明:1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。2.wait(),notify(),notifyAll()三个方法的调用者 必须是同步代码块或同步方原创 2021-01-19 21:00:27 · 83 阅读 · 0 评论 -
多线程——线程的安全问题
1、例子:创建个窗口卖票,总票数为100张.使用实现Runnable接口的方式1.问题:卖票过程中,出现了重票、错票 -->出现了线程的安全问题2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票。3.如何解决:当一个线程a在操作ticket的时候,其他线程不能参与进来。直到线程a操作完ticket时,其他线程才可以开始操作ticket。这种情况即使线程a出现了阻塞,也不能被改变。4.通过同步机制来解决线程安全的问题2、Java解决方案:同步机制(原创 2021-01-18 22:11:52 · 294 阅读 · 0 评论 -
多线程——线程的生命周期
1、图示2、 说明1.生命周期关注两个概念:状态、相应的方法2.关注:状态a–>状态b:哪些方法执行了(回调方法)某个方法主动调用:状态a–>状态b3.阻塞:临时状态,不可以作为最终状态死亡:最终状态。...原创 2021-01-18 21:01:47 · 153 阅读 · 0 评论 -
多线程常用的方法和线程优先级的设置
1、线程常用的方法1.start() ①启动当前线程 ②调用当前线程的run()方法2.run(),通常需要重写Thread类中的此方法,将创建的线程的声明要执行的操作声明在此方法中3.currentThread():静态方法,返回当前代码执行的线程4.getName()获取当前线程的名字5.setNmae()设置当前线程的名字6.yield() 释放当前cpu的执行权,线程礼让(不一定成功)7.join() 在线程A中调用线程B的join()方法,则线程A进入阻塞状态,直到线程B执行完以后线原创 2021-01-17 21:39:22 · 1132 阅读 · 0 评论 -
线程的创建和使用
一、多线程的创建和使用1、方式一:继承Thread的类1.1 创建一个继承Thread的类;1.2 重写Thread中run()方法;1.3 创建Thread类的子类对象;1.4 通过此对象调用start()方法1.5 例子:遍历100以内的偶数package Thread;/** * @author Muluo * @create 2021-01-17 19:37 * 例子:遍历100以内的偶数 */public class ThreadTest { public st原创 2021-01-17 20:17:01 · 431 阅读 · 1 评论