随笔分类 -  Java多线程编程

1 2 3 下一页
ThreadPoolExecutor线程池参数设置技巧
摘要:一、ThreadPoolExecutor的重要参数 1、corePoolSize:核心线程数 * 核心线程会一直存活,及时没有任务需要执行 * 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理 * 设置allowCoreThreadTimeout=true(默认false)时, 阅读全文
posted @ 2023-02-01 17:25 Ruthless 阅读(4497) 评论(0) 推荐(0) 编辑
Java实现异步编程的8种方式
摘要:Java实现异步编程的8种方式 阅读全文
posted @ 2022-11-17 08:53 Ruthless 阅读(298) 评论(0) 推荐(0) 编辑
Spring Boot 进阶——如何使用@Async注解提升API并发
摘要:Spring Boot使用Future以及定义超时 @Async注解用法1. 在方法上使用@Async注解,申明该方法是一个异步任务;2. 在类上面使用@Async注解,申明该类中的所有方法都是异步任务;3. 使用此注解的方法的类对象,必须是spring管理下的bean对象;4. Spring Bo 阅读全文
posted @ 2022-11-14 13:38 Ruthless 阅读(1697) 评论(0) 推荐(0) 编辑
Centos7通过yum安装jdk8
摘要:1、Centos7通过yum安装jdk8 2、Centos7通过yum安装jdk8 阅读全文
posted @ 2019-09-04 15:44 Ruthless 阅读(5659) 评论(0) 推荐(0) 编辑
队列送券的实际应用--ConcurrentLinkedQueue并发队列
摘要:1、TicketQueue.java--队列封装类,负责如下职责:a、把活动登记对象放入队列中b、从队列中获取活动登记对象,并派券 2、启动线程执行队列 阅读全文
posted @ 2016-09-08 15:54 Ruthless 阅读(2983) 评论(0) 推荐(0) 编辑
分段锁——ConcurrentHashMap
摘要:1、线程不安全的HashMap因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 2、效率低下的HashTable容器HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下Hash 阅读全文
posted @ 2016-01-14 21:18 Ruthless 阅读(11209) 评论(0) 推荐(0) 编辑
阻塞队列BlockingQueue用法
摘要:多线程环境中,通过队列可以很容易实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利地实现两者之间的数据共享。假设我们有若干生产者线程,另外又有若干个消费者线程。如果生产者线程需要把准备好的数据共享给消费者线程,利用队列的方式来传递数据,就可以很方便地解决他们之间的数据共享问题。... 阅读全文
posted @ 2016-01-14 16:04 Ruthless 阅读(3512) 评论(0) 推荐(1) 编辑
阻塞队列--LinkedBlockingQueue
摘要:什么叫线程安全?线程安全就是每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的。 线程安全就是说多线程访问同一代码,不会产生不确定的结果。并行和并发区别1、并行是指两者同时执行一件事,比如赛跑,两个人都在不停的往前跑;2、并发是指资源有限的情况下,两者交替轮流使用资源,比如... 阅读全文
posted @ 2016-01-13 17:57 Ruthless 阅读(9844) 评论(0) 推荐(2) 编辑
java5 Exchanger数据交换
摘要:Java并发API提供了一种允许2个并发任务间相互交换数据的同步应用。更具体的说,Exchanger类允许在2个线程间定义同步点,当2个线程到达这个点,他们相互交换数据类型,使用第一个线程的数据类型变成第二个的,然后第二个线程的数据类型变成第一个的。用于实现两个人之间的数据交换,每个人在完成一定的事... 阅读全文
posted @ 2015-05-18 16:03 Ruthless 阅读(927) 评论(0) 推荐(0) 编辑
CountDownLatch同步工具--控制多个线程执行顺序
摘要:好像倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当到达0时,所有等待者就开始执行。 java.util.concurrent.CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数初 阅读全文
posted @ 2015-05-17 16:15 Ruthless 阅读(1666) 评论(0) 推荐(0) 编辑
java5 ReadWriteLock用法--读写锁实现
摘要:读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁!三个线程读数据,三个线程... 阅读全文
posted @ 2015-05-14 22:00 Ruthless 阅读(1806) 评论(1) 推荐(0) 编辑
java5 Lock用法
摘要:锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问。一次只能有一个线程获得锁,对共享资源的所有访问都需要首先获得锁。不过,某些锁可能允许对共享资源并发访问,如 ReadWriteLock(维护了一对相关的锁,一个用于只读操作,另一个用于写入操作) 的读写锁。1、Lock提供... 阅读全文
posted @ 2015-05-14 21:06 Ruthless 阅读(2075) 评论(0) 推荐(0) 编辑
多个线程访问共享对象和数据的方式
摘要:多个线程访问共享对象和数据的方式有两种情况:1、每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享。2、每个线程执行的代码不同,例如:设计四个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1。a、如果每个线程执行的代码相同,可以使用同一个Runn... 阅读全文
posted @ 2015-05-10 22:10 Ruthless 阅读(1423) 评论(1) 推荐(0) 编辑
ThreadLocal线程范围内的共享变量
摘要:模拟ThreadLocal类实现:线程范围内的共享变量,每个线程只能访问他自己的,不能访问别的线程。package com.ljq.test.thread;import java.util.HashMap;import java.util.Map;import java.util.Random;/*... 阅读全文
posted @ 2015-05-07 13:15 Ruthless 阅读(9377) 评论(3) 推荐(1) 编辑
同步、异步、阻塞和非阻塞区别
摘要:简单点说:阻塞就是干不完不准回来,一直处于等待中,直到事情处理完成才返回; 非阻塞就是你先干,我先看看有其他事没有,一发现事情被卡住,马上报告领导。我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)... 阅读全文
posted @ 2015-05-02 19:19 Ruthless 阅读(2528) 评论(0) 推荐(1) 编辑
java5 CyclicBarrier同步工具
摘要:CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点(common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时CyclicBarrier很有用。因为该barrier 在释放等待线程后可以重用,所以称它为循环的... 阅读全文
posted @ 2013-07-26 16:54 Ruthless 阅读(3003) 评论(2) 推荐(2) 编辑
Java多线程-新特征-原子量
摘要:所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。Java5之后,专门提供了用来进行单变量多线程并发安全访问的工具包java.util.concurrent.atomic,其中的类也很简单。package cn.thread;import java.util.concurrent.atomic.AtomicLong;public class AtomicRunnable implemen 阅读全文
posted @ 2013-07-26 16:40 Ruthless 阅读(3190) 评论(3) 推荐(0) 编辑
java5 Condition用法--实现线程间的通信
摘要:Condition的功能类似在传统线程技术中的Object.wait()和Object.natify()的功能,传统线程技术实现的互斥只能一个线程单独干,不能说这个线程干完了通知另一个线程来干,Condition就是解决这个问题的,实现线程间的通信。比如CPU让小弟做事,小弟说我先歇着并通知大哥,大... 阅读全文
posted @ 2013-07-26 16:11 Ruthless 阅读(5614) 评论(3) 推荐(0) 编辑
Java多线程-并发协作(生产者消费者模型)
摘要:对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。对于此模型,应该明确一下几点:1、生产者仅仅在仓储未满时候生产,仓满则停止生产。2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。3、当消费者发现仓储没产品可消费时候会通知生产者生产。4、生产者在生产出可消费产品时候,应该通知等待的消费者去消费。package cn.thread;import java.util.concurrent.BlockingQu 阅读全文
posted @ 2013-07-26 14:33 Ruthless 阅读(69333) 评论(12) 推荐(3) 编辑
Java多线程-新特征-阻塞栈LinkedBlockingDeque
摘要:对于阻塞栈,与阻塞队列相似。不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头。 这里要特别说明一点的是,阻塞栈是Java6的新特征。、 Java为阻塞栈定义了接口:java.util.concurrent.BlockingDeque,其实现类也比较多,具体可以查看JavaAPI文档。 下面看一个简单例子:package cn.thread;import java.util.concurrent.BlockingDeque;import java.util.concurrent.LinkedBlockingDeque;/** * 阻塞栈 * *. 阅读全文
posted @ 2013-07-25 17:08 Ruthless 阅读(9522) 评论(3) 推荐(1) 编辑

1 2 3 下一页