多线程
多线程学习
反方向的钟c
一星程序员
展开
-
[多线程]创建多线程的方式四:使用线程池
/** * 创建线程的方式四:使用线程池 * * 思路: * 提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁 * 创建销毁、实现重复利用 * * 好处: * 1. 提高响应速度(减少了创建新线程的时间) * 2. 降低资源消耗(重复利用线程池中线程,不需要每次都创建) * 3. 便于线程管理 * corePollSize:核心池的大小 * maximumPoolSize:最大线程数 * keepAliveTime:线程没有任务时最.原创 2022-04-21 23:54:23 · 101 阅读 · 0 评论 -
[多线程]创建多线程的方式三:实现Callable接口
/** * 创建线程的方式三:实现Callable接口 --- JDK 5.0新增 * * 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程强大? * 1. call()可以有返回值的 * 2. call()可以抛出异常,被外面的操作捕获,获取异常的信息 * 3. Callable是支持泛型的 * * @author rjn * @create 04-21 17:01 */ //1. 创建一个实现Callable的实现类 class NumThrea.原创 2022-04-21 22:48:15 · 225 阅读 · 0 评论 -
[多线程]线程通信的应用之“生产者-消费者“问题
/** * 线程通信的应用:经典例题:生产者/消费者问题 * * 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品, * 店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会 * 叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了, * 店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品 * * * @author rjn * @create 04-21 15:3.原创 2022-04-21 16:36:10 · 181 阅读 · 0 评论 -
[多线程]线程通信
/** * 线程通信的例子:使用两个线程打印1-100 线程1,线程2 交替打印 * * 涉及到的三个方法: * wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器 * notify():一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就唤醒优先级高的那个 * notifyAll():一旦执行此方法,就会唤醒所有被wait的线程 * * 说明: * 1. wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方.原创 2022-04-21 12:32:00 · 45 阅读 · 0 评论 -
[多线程]同步机制的练习
/** * 银行有一个账户 * 有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打印账户余额 * * @author rjn * @create 04-21 10:32 */ class Account{ private double balance; public Account(double balance){ this.balance = balance; } //存钱 public synchroniz.原创 2022-04-21 11:02:24 · 52 阅读 · 0 评论 -
[多线程]Lock锁方式解决线程安全问题
/** * 解决线程安全问题的方式三:Lock锁 ---- JDK5.0新增 * 1. 面试题:synchronized与Lock的异同? * 相同点:二者都可以解决线程安全问题 * 不同点:synchronized机制在执行完相应的同步代码以后,自动释放同步监视器 * Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock()) * * 2. synchronized与Lock的对比: * 1)Lock是显式锁(手动开启和关闭.原创 2022-04-21 10:11:23 · 203 阅读 · 0 评论 -
[多线程]同步代码块处理实现Runnable及继承Thread类的线程安全问题
以多窗口售票为例: 创建三个窗口卖票,总票数为100张 使用实现Runnable接口的方式 class WindowThread implements Runnable{ private int ticket = 100; @Override public void run() { while (true){ if (ticket > 0){ try { T原创 2022-04-20 19:29:50 · 234 阅读 · 1 评论 -
[多线程]线程安全的单例模式之懒汉式
package chapter07; /** * 使用同步机制将单例模式中的懒汉式改写为线程安全的 * @author rjn * @create 04-20 21:23 */ public class BankTest { } class Bank{ private Bank(){ } private static Bank instance = null; public static Bank getInstance() { //方式.原创 2022-04-20 22:43:56 · 255 阅读 · 0 评论 -
[多线程]死锁问题
/**演示线程的死锁问题 * * 1. 死锁的理解:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方 * 放弃自己需要的同步资源,就形成了线程的死锁 * 2. 说明: * 1) 出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续执行 * 2) 我们使用同步时,要避免出现死锁 * * 3. 解决方法: * 1) 专门的算法、原则 * 2) 尽量减少同步资源的定义 * 3) 尽量避免嵌套同步 * @author rjn * @create 0.原创 2022-04-21 00:15:00 · 99 阅读 · 0 评论 -
[多线程]线程的基本概念、常用方法以及线程优先级说明
基本概念 程序:是为完成特定任务,用某种语言编写的一组指令的集合。指一段静态的代码,静态对象 进程:是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程(生命周期) 线程:进程可进一步细化为线程,是程序内部的一条执行路径 系统在运行时会为每个进程分配不同的内存区域(方法区、堆空间),而线程则拥有独立的运行栈和程序计数器(pc)。一个进程中的多个线程共享堆空间与方法区。 一个Java应用程序java.exe其实至少有三个线程:main()主线程,gc()垃原创 2022-04-19 18:32:14 · 405 阅读 · 0 评论