![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
文章平均质量分 76
迷糊弟弟
只有光头才能变强。
展开
-
Java停止线程的几种方法
.自我学习笔记,没放代码,留作以后速看!1. interruput()this.interrupted():测试当前线程是否中断测试当前线程是否已经中断,但会清除当前线程的中断状态,第二次调用会返回false.--------------------------------------------this.isInterruputed():测试线程是否中断测试当前线程是否已经是中断状态...原创 2019-03-25 11:44:43 · 305 阅读 · 0 评论 -
java并发编程使用Semaphore创建字符串池
类Semaphore可以有效地对并发执行并发执行任务的线程数量进行限制,这种功能可以应用在pool池技术中,可以设置同时访问pool池中数据的线程数量。本实验的功能是同时有若干个线程可以访问池中的数据,但同时只有一个线程可以取得数据,使用完毕后再放回池中。package cn.yu.test;import java.util.ArrayList;import java.util.List...原创 2019-04-24 16:12:08 · 130 阅读 · 0 评论 -
java并发编程之使用Semaphore实现多生产者/多消费者模式
本实验的目的不光是实现生产者与消费者模式,还要限制生产者与消费者的数量,这样代码的复杂性就提高一些,但好在使用Semaphore类实现这个功能还是比较简单的。package cn.yu.semaphore;import java.util.concurrent.Semaphore;import java.util.concurrent.locks.Condition;import jav...原创 2019-04-24 17:04:14 · 369 阅读 · 0 评论 -
java并发编程之CountDownLatch和CyclicBarrier的使用
CountDownLatch的使用类CountDownLatch所提供的功能是判断count计数不为0时则当前线程呈wait状态,也就是在屏障处等待,2.1.1初步使用private CountDownLatch down = new CountDownLatch(1);//初始化一个给定计数值的CountDownLatchdown.await();//除非线程被中断,否则导致当前线程等...原创 2019-04-24 21:58:56 · 1273 阅读 · 0 评论 -
Java并发编程之Fork-Join分治编程
在JDK1.7版本中提供了Fork-Join并行执行任务框架,它的主要作用是把大任务分割成若干个小任务,再对每个小任务得到的结果进行汇总,此种开发方法也叫分治编程,分治编程可以极大地利用CPU资源,提高任务执行的效率,也是目前与多线程有关的前沿技术。9.1 Fork-Join分治编程与类结构 在JDK中并行执行框架Fork-Join使用了“工作窃取”算法,它是指某个线程从其他队列里窃取任务来...原创 2019-04-29 19:33:33 · 2716 阅读 · 1 评论 -
java并发编程之Phaser的使用
通过使用CyclicBarrier类解决了CountDownLatch类的种种缺点,但不可否认的是,CyclicBarrier类还是有一些自身上的缺陷,比如不可以动态添加parties计数,调用一个await()方法仅仅占用一个parties计数,所以jdk7中新增一个名称为Phaser的类来解决这样的问题。3.2类Phaser的arriveAndAwaitAdvance()的方法//创建一个...原创 2019-04-25 10:36:27 · 970 阅读 · 1 评论 -
java并发编程之并发集合框架
在JDK中提供了丰富的集合框架工具,这些工具可以有效地对数据进行处理。原创 2019-04-30 00:14:55 · 203 阅读 · 0 评论 -
java多线程之线程的状态转变
线程的对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中线程的状态转换关系:原创 2019-04-30 10:36:02 · 135 阅读 · 0 评论 -
Java高并发编程之多线程基础
1.线程的start方法剖析原创 2019-04-30 15:18:59 · 111 阅读 · 0 评论 -
java高并发编程之深入理解Thread构造函数
1原创 2019-04-30 17:28:01 · 717 阅读 · 0 评论 -
java并发编程之Thread API的详细介绍
3.1 sleep()方法 sleep()是一个静态方法,其有两个重载方法,其中一个需要传入毫秒数,另外一个既需要毫秒数也需要纳秒数。3.1.1 sleep方法介绍 public static void sleep(long millis) throws InterruptedExceptionpublic static void sleep(long millis,int nanos) ...原创 2019-04-30 23:28:17 · 429 阅读 · 0 评论 -
java高并发编程之线程安全与数据同步
什么是共享资源?共享资源指的是多个线程同时对同一份资源进行访问,被多个线程访问的资源就称为共享资源,如何保证多个线程访问到的数据时一致的,则被称为数据同步或者资源同步。4.1 数据同步4.1.1 数据不一致引入的问题public class MyThread extends Thread{ int count = 5; public void run() { while(count&...原创 2019-05-01 12:22:26 · 246 阅读 · 0 评论 -
Java并发编程的艺术之并发编程的挑战
1.1 上下切换上下文是贯穿整个系统或阶段生命周期的对象,其中包含了系统全局的一些信息,比如登录之后的用户信息,账号信息,以及在程序每一个阶段运行时的数据。上下文切换:任务从保存到再加载的过程就是一次上下文切换。1.2 如果减少上下文切换1.无锁并发编程。2.CSA算法3.使用最少线程4.协程。1.3 死锁交叉锁引起的死锁1.4 资源限制的挑战(1)资源限制的挑战硬件资源...原创 2019-05-10 18:29:08 · 128 阅读 · 0 评论 -
Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。1.volatile的应用volatile生成汇编指令时会在前面加lock前缀,lock前缀的指令在多核处理器下会引发了两种事情。1.将当前处理器缓存行的数据写回到系统内存2.这个写回内存的操作会使在其...原创 2019-05-11 11:35:42 · 99 阅读 · 0 评论 -
final关键字理解与双重锁机制的优化
常见的解释,final修饰类,类不能被继承final修饰方法,方法不能被重写final修饰变量,表示常量但看了《java并发编程的艺术》后,发现final还有别的作用:final域的内存语义:3.6.1 final域,编译器和处理器要遵守两个重排序规则:1.要构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。2.初次读一个...原创 2019-07-24 17:12:13 · 461 阅读 · 0 评论 -
java并发编程之Semaphore和Exchanger的使用
1. Semaphore的使用1.1 Semaphore的使用此类的主要作用就是限制线程并发的数量,如果不限制线程并发的数量,则CPU的资源很快就被耗尽,每个线程执行的任务是相当缓慢。Semaphore类发放许可的计算方式是“减去”操作。1.1.1 Semaphore的同步性private Semaphore semaphore = new Semaphore(2);类Semapho...原创 2019-04-24 17:43:36 · 412 阅读 · 0 评论 -
Java高并发编程之Hook线程以及捕获线程执行异常
7.1 获取线程运行时异常在Thread类中,关于处理运行时异常的API总共有四个,如下:public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh) { checkAccess(); uncaughtExceptionHandler = eh; } .............原创 2019-05-02 11:33:10 · 434 阅读 · 0 评论 -
java高并发编程之线程间通信
5.1 同步阻塞与异步非阻塞异步非阻塞的优势非常明显,首先客户端不用等到结果处理结束之后才能返回,从而提高了系统的吞吐量和并发量;其次若服务端的线程数量在一个可控的范围之内是不会导致太多的CPU上下文切换从而带来额外的开销的;再次服务端线程可以重复利用,这样就减少了不断创建线程带来的资源浪费。但是异步处理的方式同样也存在缺陷,比如客户端想要得到结果还需要再次调用接口方法进行查询。5.2 单线...原创 2019-05-01 20:39:06 · 181 阅读 · 0 评论 -
java简单的生产者消费者问题代码实例
学习java多线程的synchronized关键字与wait/notify等待唤醒机制。又想到了操作系统里的消费者与生产者模式,写了个小例子加深理解。共享资源为Food类代码如下:public class Food { private int count;//生产者与消费者共享的资源 public Food() { }public synchronized int getCo...原创 2019-03-29 17:13:12 · 3227 阅读 · 0 评论 -
Thread.currentThread().getName与this.getName()理解
在看Java多线程编程核心技术,对Thread.currentThrad.getName()与this.getName运行结果产生了困惑,看了网上一些博客解释,自己也产生了些许想法。线程类:public class MyThread extends Thread{ public MyThread() { System.out.println("构造方法"); Syste...原创 2019-03-23 13:10:23 · 640 阅读 · 0 评论 -
java并发编程之Executor与ThreadPoolExecutor的使用
在JDK5中提供了线程池的支持,主要的作用是支持高并发的访问处理,并且可以将线程对象进行复用,核心原理即创建了一个运行效率比较优异的“线程池ThreadPool”,在池中支持线程对象管理,包括创建与销毁,使用池中只需要执行具体的任务即可,线程对象的吃力都在池中被封装了。Executor接口介绍4.2 使用Executors工厂类创建线程池 接口Executor仅仅是一种规范,是一种声明,是...原创 2019-04-25 21:58:29 · 745 阅读 · 0 评论 -
java并发编程之Future和Callable的使用
在默认的情况下,线程Thread对象不具有返回值的功能,如果在需要取得返回值的情况下是极不方便的,但在原创 2019-04-26 11:01:40 · 309 阅读 · 0 评论 -
Java创建多线程的4种方式
第一种继承Therad类第二种实现Runnable接口第三种应用程序可以使用Executor框架来创建线程池第四种实现Callable接口原创 2019-04-26 11:31:51 · 319 阅读 · 0 评论 -
Javad多线程之定时器Timer
定时器Timer的使用在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类执行计划任务的代码要放入TimerTask的子类中,因为TimerTask是一个抽象类。5.1.1 方法schedule(TimerTask task,Date time)该方法的作用是在指定的日期执行一...原创 2019-04-26 16:42:49 · 216 阅读 · 0 评论 -
Java并发编程之CompletionServie的使用
接口CompletionService的功能是以异步的方式一边生产新的任务,一边处理已经完成任务的结果,这样可以将执行任务与处理任务分离开来进行处理。使用submit执行任务,使用take取得已完成的任务,并按照完成这些任务的时间顺序处理他们的结果。CompletionService介绍接口CompletionService的结构比较简单,仅有一个实现类ExecutorCompletionSe...原创 2019-04-26 20:59:11 · 614 阅读 · 0 评论 -
Java版二分法解决排序数组中数字出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。思路:找到该数字第一次出现的位置与最后一次出现的位置。public class Test { public static void main(String[] args) { int [] data = {1,3,4,4,5}; Sy...原创 2019-04-27 00:33:24 · 425 阅读 · 0 评论 -
Java并发编程之接口ExecutorService的方法使用
7.1 在ThreadPoolExecutor中使用ExecutorService中的方法方法invokeAny()和invokeAll()具有阻塞特性。方法invokeAny()取得第一个完成任务的结果值,当第一个任务执行完成后,会调用interrupt()方法将其他任务中断,所以在这些任务中可以结合if(Thread.currentThread().isInterrupted()==tru...原创 2019-04-27 10:37:58 · 571 阅读 · 0 评论 -
java并发编程之计划任务ScheduledExecutorService的使用
java中的计划任务Timer工具类提供了以计时器或计划任务的功能来实现按指定时间或时间间隔执行任务,但由于Timer工具类并不是以池pool,而是以队列的方法来管理线程的,所以在高并发的情况下运行效率较低,在新版JDK中提供了ScheduledExecutorService对象来解决效率与定时任务的功能。8.1 ScheduledExecutorService的使用 类ScheduledE...原创 2019-04-27 15:06:08 · 2542 阅读 · 0 评论 -
Java实现生产者和消费者的5种方式
转自https://blog.csdn.net/wowwilliam0/article/details/80875673面试的时候会让手撕,生产者消费者模式,生产者消费者模式,涉及线程同步与通信的问题。实现方式有wait/notify|notifyAllReetrantLock锁阻塞队列信号量Semaphore管道输入输出流wait()和notify()方法的实现package ...原创 2019-08-24 10:28:52 · 600 阅读 · 0 评论