
多线程
pengzhisen123
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
多线程与并发----线程互斥技术
1、使用synchronized代码块2、使用synchronized方法3、分析静态方法锁使用的同步监视器对象是什么?4、wait与notify实现线程间的通信例一:使用内部类和两个线程交替不停的打印lisi和zhangsan两个名字public class ThreadSynchronized { public static void main(String[] args) { ...原创 2018-05-08 21:15:03 · 499 阅读 · 0 评论 -
多线程与并发----读写锁
锁 1、锁分为读锁和写锁 2、多个读锁不互斥 3、读锁和写锁互斥 4、写锁与写锁互斥 总之,这是由JVM自己控制的,如果你的代码只读取数据,可以多人同时读,但不能同时写,那就上读锁;若歌你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。三个线程读数据,三个线程写数据示例: 功能:可以同时读,读的时候不能写,不能同时写,写的时候不能读,读的时...原创 2018-05-12 21:04:52 · 1437 阅读 · 0 评论 -
多线程与并发-----条件阻塞Condition的应用
Condition 1、 功能: 其类似在传统线程技术中的 Object.wait() 和 Object.notify() 的功能,传统线程技术实现互斥只能是一个线程单独干,不能说这个线程干完了通知另一个线程来干,Condition就是解决这个问题:实现线程间的通信。比如CPU让小弟做事,小弟说我先歇着,并通知大哥,大哥开始做事。 public interface Cond...原创 2018-05-13 15:59:02 · 419 阅读 · 0 评论 -
多线程与并发----Semaphere同步
Semaphore实现信号灯: Semaphore可以维护当前访问自身的线程个数,并且提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 java.util.concurrent.Semaphore 一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 ...原创 2018-05-13 16:38:49 · 615 阅读 · 0 评论 -
多线程与并发----CycliBarrier、CountDownLatch 和 Exchanger同步
一、CycliBarrier 表示大家彼此等待,大家集合号后才开始出发,分散活动后又在指定地点集合碰面,这就好比整个公司的人员利用周末时间集体郊游一样,先各自从家出发到公司集合后,在他同时出发到公园游玩,在指定地点集合后再同时就餐。 功能: 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)...原创 2018-05-13 19:58:37 · 607 阅读 · 0 评论 -
多线程与并发----阻塞队列的应用
一、队列 1、队列分为固定长度的队列和不固定长度的队列; 2、固定长度的队列,若放满了还要放,阻塞式队列就会等待,直到有数据取出,空出位置后才继续放; 3、固定长度的队列,若放满了还要放,非阻塞式队列不能等待就只能报错了。二、阻塞队列(BlockingQueue)public interface BlockingQueue<E> extends ...原创 2018-05-13 20:58:39 · 991 阅读 · 0 评论 -
多线程与并发-----同步集合类
传统集合实现同步的问题 举了一个例子:Map集合线程不同步导致的问题。 解决办法: 使用同步的Map集合 使用集合工具类中的方法将不同步的集合转为同步的Collections.synchronizedMap(new Map())这个方法返回一个同步的集合 public static <K, V> Map<K, V> synchronizedMap(Map<...原创 2018-05-13 21:39:33 · 367 阅读 · 0 评论 -
多线程例题
1、现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象。原始代码如下:public class Test { public static void main(String[] args){ System.out.pr...原创 2018-05-14 10:57:27 · 614 阅读 · 0 评论 -
多线程与并发----传统定时器
定时器(Timer) 例1:写一个五秒后就输出一个结果,并打印出时间: schedule(TimerTask task, Date time) 安排在指定的时间执行指定的任务。import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class...原创 2018-05-08 16:29:26 · 416 阅读 · 0 评论 -
多线程与并发-----Lock锁技术
Lock java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类, 接口摘要ConditionCondition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。LockLock 实现提供了比使...原创 2018-05-12 17:14:11 · 1066 阅读 · 0 评论 -
多线程与并发----Callabe与Future的应用
import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Fu...原创 2018-05-12 16:47:11 · 533 阅读 · 0 评论 -
线程间的通信、同步方式与进程间通信方式
1、线程间的通信方式使用全局变量主要由于多个线程可能更改全局变量,因此全局变量最好声明为volatile使用消息实现通信在Windows程序设计中,每一个线程都可以拥有自己的消息队列(UI线程默认自带消息队列和消息循环,工作线程需要手动实现消息循环),因此可以采用消息进行线程间通信sendMessage,postMessage。1)定义消息#define WM_THREAD_SENDMSG=WM_...转载 2018-05-09 16:09:24 · 253 阅读 · 0 评论 -
临界区,互斥量,信号量,事件的区别
最早的一篇原文:http://hi.baidu.com/cnrjm/blog/item/5d217e54ff863550564e00b9.html 四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线...转载 2018-05-09 17:34:18 · 175 阅读 · 0 评论 -
java中实现可见性的三个关键字
1、volatile 通过内存屏障和禁止指令重排序来保证可见性的。 (a)、对volatile进行读操作,会在读操作之前增加一个load屏障指令 (b)、对volatile进行写操作,会在写操作之后增加一个store屏障指令 内存屏障:处理器的一组指令,用于实现对内存操作的顺序限制(指令重排时不能把后面的指令重排列到内存屏障之前的位置)2、synchronize...原创 2018-05-10 16:53:50 · 8472 阅读 · 0 评论 -
多线程与并发----线程范围内共享变量
线程范围内共享数据图解:mport java.util.HashMap;import java.util.Map;import java.util.Random;public class ThreadScopeShareDate { //三个模块共享数据,主线程模块和AB模块 private static int data=0; //准备共享的数据 //存放各个线程对应的数据 p...原创 2018-05-11 10:56:37 · 648 阅读 · 0 评论 -
多线程与并发-----ThreadLocal类及应用技巧
多个模块在同一个线程中运行时要共享同一份数据,实现线程范围内的数据共享可以用Map。 JDK1.5提供了ThreadLocal类来方便实现线程范围内的数据共享,它的作用就相当于Map。 每个线程调用全局ThreadLocal对象的set方法,就相当于往其内部的map集合中增加一条记录,key就是各自的线程,value就是各自的set方法传进去的值。 在线程结束时可以调用ThreadLocal.cl...原创 2018-05-11 12:17:08 · 247 阅读 · 0 评论 -
多线程与并发----共享数据的方式探讨
设计4个线程,其中两个线程每次对 j 增加1,另外两个线程对 j 每次减少1,写出程序。 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,比如,卖票系统就可以这么做。public class MultiThreadShareData { public static void main(String[] args) { Shar...原创 2018-05-11 14:39:14 · 193 阅读 · 0 评论 -
线程池的原理及实现
1、线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。 一个线程池包括以下四个基本组...转载 2018-05-11 15:33:18 · 151 阅读 · 0 评论 -
多线程与并发-----线程池的并发库的应用
线程池:先创建多个线程放在线程池中,当有任务需要执行时,从线程池中找一个空闲线程执行任务,任务完成后,并不销毁线程,而是返回线程池,等待新的任务安排。 线程池编程中,任务是提交给整个线程池的,并不是提交给某个具体的线程,而是由线程池从中挑选一个空闲线程来运行任务。一个线程同时只能执行一个任务,可以同时向一个线程池提交多个任务。一、线程池创建方法: a、创建一个拥有固定线程数的...原创 2018-05-12 11:21:58 · 259 阅读 · 0 评论 -
线程池与Executor 框架
本节思维导图: 思维导图源文件+思维导图软件关注微信公众号:“Java面试通关手册” 回复关键字:“Java多线程” 免费领取。一 使用线程池的好处线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。 这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处: 降低资源消耗。通过重复利用已创建的线程降低线程创建...转载 2018-10-06 11:45:06 · 244 阅读 · 0 评论