
多线程
多线程的学习
Sky-木落
程序猿!热爱编程、旅行、摄影、轻音乐等、
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
两个线程交替打印输出的各种写法
方式一:使用LockSupport package 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 · 275 阅读 · 0 评论 -
多线程下载器项目实战
目录结构 源代码 Constant.class package 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 · 280 阅读 · 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 · 169 阅读 · 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 · 153 阅读 · 0 评论 -
线程的通信
1、线程通信涉及到的三个方法: wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。 notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。 notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。 2、说明: 1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。 2.wait(),notify(),notifyAll()三个方法的调用者 必须是同步代码块或同步方原创 2021-01-19 21:00:27 · 111 阅读 · 0 评论 -
多线程——线程的安全问题
1、例子:创建个窗口卖票,总票数为100张.使用实现Runnable接口的方式 1.问题:卖票过程中,出现了重票、错票 -->出现了线程的安全问题 2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票。 3.如何解决:当一个线程a在操作ticket的时候,其他线程不能参与进来。直到线程a操作完ticket时,其他线程才可以开始操作ticket。这种情况即使线程a出现了阻塞,也不能被改变。 4.通过同步机制来解决线程安全的问题 2、Java解决方案:同步机制(原创 2021-01-18 22:11:52 · 339 阅读 · 0 评论 -
多线程——线程的生命周期
1、图示 2、 说明 1.生命周期关注两个概念:状态、相应的方法 2.关注:状态a–>状态b:哪些方法执行了(回调方法) 某个方法主动调用:状态a–>状态b 3.阻塞:临时状态,不可以作为最终状态 死亡:最终状态。 ...原创 2021-01-18 21:01:47 · 177 阅读 · 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 · 1196 阅读 · 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 · 481 阅读 · 1 评论