java多线程相关
Jarvis.y
学到老,活到老~~~
展开
-
Java 线程池的复用原理
线程池的运行图在线程池中,线程会从 workQueue 中读取任务来执行,最小的执行单位就是 Worker,Worker 实现了 Runnable 接口,重写了 run 方法,这个 run 方法是让每个线程去执行一个循环,在这个循环代码中,去判断workQueue中是否有任务,若有则直接去执行这个任务,因此线程数不会增加。而在添加的线程的核心方法就是execute 中的addWorker方法:首先看execute方法:public void execute(Runnable command) {原创 2020-11-17 23:25:03 · 276 阅读 · 0 评论 -
java 阻塞队列介绍
详细博客:https://www.cnblogs.com/bjxq-cs88/p/9759571.html阻塞队列(BlockingQueue)阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处.原创 2020-11-10 15:42:04 · 115 阅读 · 0 评论 -
Executors 线程池的7个参数详解
线程池创建有7个参数下面为构造函数/*** Creates a new {@code ThreadPoolExecutor} with the given initial* parameters.** @param corePoolSize the number of threads to keep in the pool, even* if they are idle, unless {@code allowCoreThreadTimeOut} is set* @param原创 2020-10-31 20:33:59 · 617 阅读 · 0 评论 -
多线程之join用法
先看例子:网上的例子/*** join的用法,哪个线程调用join哪个线程就插队先执行*/public class JoinTest { public static void main(String[] args) { //开启学习线程 Study study = new Study(); study.setName("学习线程------"); study.start(); try {原创 2020-11-07 00:09:07 · 2102 阅读 · 0 评论 -
多线程之 interrupt,interrupted,isInterrupted 方法区别
首先看测试代码/*** Created by Jarvis.y on 2020/11/5* <p>* interrupt , interrupted , isInterrupted 方法测试*/public class InterruptTest { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start();原创 2020-11-05 23:13:32 · 548 阅读 · 0 评论 -
synchronized 为什么不能使用string对象而是要使用string.intern
先看代码:/*** Created by Jarvis.y on 2020/11/5*/public class StringTest { public static void main(String[] args) { String s1 = "Jarvis.y"; String s2 = new String("Jarvis.y"); System.out.println(s1.equals(s2)); System.o原创 2020-11-05 23:12:28 · 2394 阅读 · 1 评论 -
多线程之wait和notify使用注意事项
首先先看代码这个是网上流传比较广的例子/*** Created by Jarvis.y on 2020/11/4* <p>* 1、wait() and notify() and notifyAll() 需要在 synchronized 同步方法中。* 如果没有 synchronized,会出现 IllegalMonitorStateException 异常* 2、wait and notify 一定要使用被锁的对象(synchronized修饰的)。* 3、使用wait的时候 一原创 2020-11-04 23:30:22 · 259 阅读 · 0 评论 -
多线程之终止线程的四种方法
终止线程的四种方法第一种:正常运行结束第二种:使用退出标志退出线程第三种:interrupt()方法退出第四种:stop方法退出第一种:正常运行结束这种就是程序正常执行完run方法或者cell方法然后退出。第二种:使用退出标志退出线程一般run方法执行完,线程就会正常结束,但是我们常常有些需求是需要长时间运行的。只有满足某些条件,才能终止这些线程。所以使用一个变量来控制循环,比如最直接方式就是设置一个boolean类型的变量,并且通过设置这个标志为true或者false来控制循环是否退出。原创 2020-11-03 20:24:39 · 5192 阅读 · 0 评论 -
线程的五大生命周期
线程在创建并启动这一系列操作会经历五大生命周期分别为:新建(NEW),就绪(Runnable),运行(Running),阻塞(Blocked),死亡(Dead)当线程被启动后,它不可能一直使用CPU独自运行,还有更多的线程需要使用到CPU,所以CPU会在多条线程之间切换执行命令,于是线程状态也会多次在运行,阻塞之间切换。线程运行生命周期图新建状态 (NEW)当程序使用 new 关键字创建了一个线程之后,该线程就处于新建状态,此时仅由 JVM 为其分配内存,并初始化其成员变量的值。Thread原创 2020-11-02 23:32:12 · 957 阅读 · 0 评论 -
Java 创建线程的4种方式
第一种:继承Thread类,重写run方法MyThread thread1 = new MyThread();thread1.setName("第一种线程");thread1.start();第二种:实现Runnable接口Thread thread21 = new Thread(() -> { for (int i = 0; i < 3; i++) { System.out.println(Thread.currentThread().getName() +原创 2020-10-29 17:31:51 · 232 阅读 · 0 评论 -
Java 通过Executors创建线程池的种类
java通过Executors可以创建四种线程池:newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需求,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数。超出的线程会在队列中等待newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任原创 2020-10-29 17:26:49 · 144 阅读 · 0 评论