在并发编程中很容易出现并发安全问题,最简单的例子就是多线程更新变量i=1,多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchronized进行控制来达到线程安全的目的。但是由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案。实际上, ...
分类:
编程语言 时间:
2019-09-18 13:11:55
阅读次数:
109
多线程 35. 并行和并发有什么区别? 并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。 并行是指两个或者 ...
分类:
编程语言 时间:
2019-09-15 11:30:15
阅读次数:
83
Executor ExecutorService 是一个接口,继承了 接口,定义了一些生命周期的方法 Executors工厂类 类,提供了一系列工厂方法用于创建线程池,返回的线程池都实现了 接口。 线程池分类 ...
分类:
其他好文 时间:
2019-09-14 16:15:05
阅读次数:
80
目的:提高可用性 通过ExecutorService实现队列泄洪 将有并发压力的下游代码放入到线程池的submit方法中,如下: 通过Guava RateLimit 负载均衡的情况下,在单机内部实现限流 需要加入Guava依赖 在方法入口内加上以下代码: 最后: 这里只简单描述了如何最简单的使用,降 ...
分类:
编程语言 时间:
2019-09-13 17:50:51
阅读次数:
120
创建线程的方式有三种 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 第三种方式,可以通过FutureTask包装类调用get()方法获取到线程的返回值 也可以通过ExecutorService创建的线程池调用submit()方法返回一个Future对象来获取线程 ...
分类:
编程语言 时间:
2019-09-12 23:44:43
阅读次数:
117
三种多线程实现方式: 继承Thread类,重写run方法,启动start 实现Runnable接口,重写run方法,创建Thread代理类并传入,启动start 实现Callable接口,重写call方法,创建线程池并传入submit执行。 继承Thread类,重写run方法,启动start 实现R ...
分类:
编程语言 时间:
2019-09-12 23:08:42
阅读次数:
102
基础 1、JVM内存模型和JAVA内存模型JMM 2、Jvm垃圾回收机制 3、Java多线程、线程池及并发包 4、Java锁 5、Java集合 6、Java BIO、NIO 7、Spring源码解析; 8、SpringBoot 存储相关: 1、MySQL 2、Redis 3、MQ 架构相关: 1、分 ...
分类:
编程语言 时间:
2019-09-08 09:33:44
阅读次数:
98
通信的方式要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。涉及到线程之间的相互通信,分为下面四类:文件共享网络共享共享变量JDK提供的线程协调APIsuspend/resume、wait/notify、park/unpark文件共享publicclassMainTest{publicstaticvoidmain(String[]args){//线程1-写入数据newT
分类:
编程语言 时间:
2019-09-04 10:09:20
阅读次数:
91
题目描述 建立三个线程A、B、C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印。 5种方法 5.1 使用synchronized, wait和notifyAll 5.2 使用Lock->Reen ...
分类:
编程语言 时间:
2019-08-31 23:46:54
阅读次数:
198
1. 同步方法用synchronized关键字修饰方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。 2. 同步代码块用synchronized关键字修饰语句块。被该关键字修饰的语句块会自动被加上内置锁,从 ...
分类:
编程语言 时间:
2019-08-31 23:29:09
阅读次数:
102