随笔分类 -  java并发

摘要:```java public class UserEntity { private String userId; private String userName; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public Str 阅读全文
posted @ 2019-08-31 15:23 fly_bk 阅读(194) 评论(0) 推荐(0)
摘要:Guarded Suspension 意为保护暂停,假设服务器很短时间内承受大量的客户端请求,客户端请求的数量超过服务器本身的即时处理能力,而服务器又不能丢弃任何一个客户端请求,此时可以让客户端的请求进行排队,由服务端程序一个接一个处理,保证了所有的客户端请求均不丢失,同时避免了服务器由于同时处理太 阅读全文
posted @ 2019-08-31 10:24 fly_bk 阅读(229) 评论(0) 推荐(0)
摘要:Master Worker模式是一种使用多线程进行数据处理的结构,多个worker进程协作处理用户请求,master进程负责维护worker进程,并整合最终处理结果 主要参与者 Worker:用于实际处理一个任务 Master:用于任务的分配和最终结果的合成 Main:启动系统,调度开启Master 阅读全文
posted @ 2019-08-31 09:17 fly_bk 阅读(592) 评论(0) 推荐(0)
摘要:```java /** * 数据接口 */ public interface Data { public String getResult(); } ``` ```java /** * 最终需要使用的数据模型 */ public class RealData implements Data{ protected final String result; publi... 阅读全文
posted @ 2019-08-30 16:13 fly_bk 阅读(352) 评论(0) 推荐(0)
摘要:```java import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; / CyclicBarrier可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 / 阅读全文
posted @ 2019-08-24 08:29 fly_bk 阅读(120) 评论(0) 推荐(0)
摘要:门闩是concurrent包中定义的一个类型,是用于多线程通讯的一个辅助类型。 门闩相当于在一个门上加多个锁,当线程调用await方法时,会检查门闩数量,如果门闩数量大于0,线程会阻塞等待。 当线程调用countDown时,会递减门闩的数量,当门闩数量为0时,await阻塞线程可执行。 阅读全文
posted @ 2019-08-23 16:44 fly_bk 阅读(182) 评论(0) 推荐(0)
摘要:```java import java.util.Random; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent. 阅读全文
posted @ 2019-08-23 16:30 fly_bk 阅读(173) 评论(0) 推荐(0)
摘要:Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机 阅读全文
posted @ 2019-08-23 15:38 fly_bk 阅读(184) 评论(0) 推荐(0)
摘要:```java import java.util.concurrent.locks.ReentrantLock; / 重入锁 ReenterLock 一个线程允许连续获得同一把锁,注意:必须释放相同次数,释放次数多,会异常,少了相当于线程还持有这个锁,其他线程无法进入临界区 需要手动指定何时加锁何时 阅读全文
posted @ 2019-08-21 14:36 fly_bk 阅读(724) 评论(0) 推荐(0)
摘要:```java import java.util.ArrayList; import java.util.Vector; / 并发下的ArrayList / public class ArrayListMultiThread { static ArrayList arrayList = new Ar 阅读全文
posted @ 2019-08-21 10:48 fly_bk 阅读(683) 评论(0) 推荐(0)
摘要:同步的前提: 1. 必须要有两个或者两个以上的线程 2. 必须是多个线程使用同一个锁 3. 必须保证同步中只能有一个线程在运行 好处:解决了多线程的安全问题 弊端:多个线程需要判断锁,较为消耗资源、抢锁的资源。 java import java.util.ArrayList; import java 阅读全文
posted @ 2019-08-20 17:22 fly_bk 阅读(141) 评论(0) 推荐(0)
摘要:```java /** * 优先级 */ public class PriorityDemo { public static class HightPriority extends Thread{ static int count = 0; @Override public void run() { while (true){ synchronized (PriorityDemo.class){ 阅读全文
posted @ 2019-08-20 16:30 fly_bk 阅读(391) 评论(0) 推荐(0)
摘要:```java public class ThreadGroupDemo implements Runnable{ public static void main(String[] args){ //建立一个名为"GroupName"的线程组 ThreadGroup group = new ThreadGroup("GroupName"); //将T1,T2两个线程加入组中 Thread thre 阅读全文
posted @ 2019-08-20 16:10 fly_bk 阅读(180) 评论(0) 推荐(0)
摘要:```java /** * 数据不一致问题 * stop */ public class StopDemo { public static Student student = new Student(); public static class Student{ private int id; private String name; public Student() { id = 0; name 阅读全文
posted @ 2019-08-19 16:45 fly_bk 阅读(200) 评论(0) 推荐(0)
摘要:```java /** * 原子性:指一个操作是不可中断的,即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰 * long型数据在32位的系统中的读写不是原子性的(long有64位) * 注意:在32位虚拟机下执行,会输出信息 */ public class MultiTheadLong { public static long t = 0; publi... 阅读全文
posted @ 2019-08-19 15:39 fly_bk 阅读(243) 评论(0) 推荐(0)
摘要:并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的,而并行是真正意义上的“同时执行” 阅读全文
posted @ 2019-08-19 14:49 fly_bk 阅读(184) 评论(0) 推荐(0)
摘要:synchronized,volatile都解决了共享变量 value 的内存可见性问题,但是前者是独占锁,同时只能有一个线程调用 get()方法,其他调用线程会被阻塞, 同时会存在线程上下文切换和线程重新调度的开销,这也是使用锁方式不好的地方。 而后者是非阻塞算法,不会造成线程上下文切换的开销。 阅读全文
posted @ 2019-08-19 09:14 fly_bk 阅读(211) 评论(0) 推荐(0)
摘要:```java import sun.misc.Unsafe; /** * JDK8 * JDK 的此jar 包中的 Unsafe 类提供了硬件级别的原子性操作 */ public class UnsafeTest { //获得Unsafe的一个实例 static final Unsafe unsafe1 = Unsafe.getUnsafe(); static final long stateO 阅读全文
posted @ 2019-08-17 14:42 fly_bk 阅读(395) 评论(0) 推荐(0)
摘要:假如线程 A 和线程 B 同时处理一个共享变量,使用图所示 CPU 架构, 假设线程 A 和线程 B 使用不同 CPU 执行,并且当前两级 Cache 都为空, 那么这时候由于 Cache 的存在,将会导致内存不可见问题, 具体看下面的分析。 线程 A 首先获取共享变量 X 的值,由于两级 Cach 阅读全文
posted @ 2019-08-17 10:26 fly_bk 阅读(147) 评论(0) 推荐(0)
摘要:简单使用 java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; impo 阅读全文
posted @ 2019-08-17 09:51 fly_bk 阅读(161) 评论(0) 推荐(0)