Java高并发与线程安全
_吹雪_
这个作者很懒,什么都没留下…
展开
-
Java多线程之线程并发库面试题
第一题:现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象。原始代码如下: public class Test { public static void main(String[] args){ Syst...原创 2016-11-21 13:51:13 · 452 阅读 · 0 评论 -
Java多线程之多个线程访问共享对象和数据的方式
1.如果每个线程执行的代码相同,可以使用同一个Runable对象,这个Runable对象中有那个共享数据,例如卖票系统就可以这样做。 package javaplay.test;public class MulteThreadShareData { public static void main(String[] args) { ShareData shareData = ne...原创 2016-11-16 23:29:18 · 5493 阅读 · 0 评论 -
Java多线程之传统定时器技术
package javaplay.thread.test;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class TraditionalTimerTest { static int count = 0; public static void main(Stri...原创 2016-11-17 20:27:31 · 353 阅读 · 0 评论 -
Java多线程之传统线程互斥技术
package javaplay.thread.test;public class TraditionalThreadSynchronized { public static void main(String[] args) { new TraditionalThreadSynchronized().init(); } private void init() { final...原创 2016-11-17 23:04:22 · 334 阅读 · 0 评论 -
Java多线程之传统线程同步通信技术
wait和notify实例子线程循环10次,主线程循环100次。接着子线程循环10次,主线程循环100次。如此循环50次。摘自张孝祥老师线程视频源码。 package javaplay.thread.test;public class TraditionalThreadCommunication { public static void main(String[] args) ...原创 2016-11-18 19:25:54 · 470 阅读 · 0 评论 -
Java多线程之线程范围内共享变量的概念与作用
要实现线程范围内的数据共享,就是说不管是A模块还是B模块,如果它们现在在同一个线程上运行,它们操作的数据应该是同一个,下面的做法就不行: package javaplay.thread.test;import java.util.Random;public class ThreadScopeShareData { private static int data = 0; ...原创 2016-11-18 20:21:44 · 1717 阅读 · 0 评论 -
Java多线程之ThreadLocal类及应用技巧
示例: package javaplay.thread.test;import java.util.Random;public class ThreadLocalTest { // 相当于一个hashmap,数据是线程范围内的,一个线程一个数据,特别简单 static ThreadLocal<Integer> x = new ThreadLocal<Int...原创 2016-11-18 22:39:24 · 361 阅读 · 0 评论 -
Java多线程之线程并发库原子性操作类
AtomicInteger 用得不当被笑掉大牙AtomicIntegerArrayAtomicIntegerFieldUpdater:对类中整数字段进行操作,需要先反射获取对象身上的字段即atomic包,可以对基本数据、对数组中的基本数据、对类中的基本数据等进行操作,没啥特别的;关于volatile类型的作用,需要查看java语言规范...原创 2016-11-18 23:01:37 · 461 阅读 · 0 评论 -
Java多线程之线程并发库的线程池
应用示例如下: package javaplay.thread.test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class ThreadPoolTest { pu...原创 2016-11-19 08:42:29 · 418 阅读 · 0 评论 -
Java多线程之线程并库Callable与Future的应用
示例: package javaplay.thread.test;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutorCompletionServ...原创 2016-11-19 09:28:24 · 414 阅读 · 0 评论 -
Java多线程之线程并发库的线程锁技术
Lock比传统线程模型中的Synchronied方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码段要实现同步互斥的效果,它们必须用同一个Lock对象,锁是在代表要操作的资源的类的内部方法中,而不是线程代码中.Lock就用来替代synchronized的 package javaplay.thread.test;import java.util.con...原创 2016-11-19 10:02:58 · 327 阅读 · 0 评论 -
java多线程之线程并发库读写锁技术的妙用
读写锁,分为读锁和写锁,多个读锁不互斥,读锁和写锁互斥,写锁与写锁互斥,这是JVM自己控制的,你只要上好相应的锁即可,如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁.总之,读的时候上读锁,写的时候上写锁!看如下程序: 新建6个线程,3个线程用来读,3个线程用来写, package javaplay....原创 2016-11-19 10:50:31 · 3299 阅读 · 1 评论 -
Java多线程之线程并发库条件阻塞Condition的应用
锁(Lock/synchronized)只能实现互斥不能实现通信,Condition的功能类似于在传统的线程技术中的,Object.wait()和Object.notify()的功能,在等待Condition时,允许发生"虚假唤醒",这通常作为对基础平台语义的让步,对于大多数应用程序,这带来的实际影响很小,因为Condition应该总是在一个循环中被等待,并测试正被等待的状态声明.某个实现可以随意...原创 2016-11-19 21:58:09 · 1040 阅读 · 0 评论 -
Java多线程之线程并发库的Semaphere同步工具
Semaphore这个东西和之前的synchronized干的事差不多。 synchronized保证了,我管理的那部分代码同一时刻只有一个线程能访问 Semaphore保证了,我管理的那部分代码同一时刻最多可以有n个线程访问 Semaphore可以维护当前访问自身的线程个数,并提 供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。Sem...原创 2016-11-20 11:02:23 · 534 阅读 · 0 评论 -
Java多线程之线程并发库的其他同步工具类
CyclicBarrier表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面,这就好比整个公司的人员利用周末时间集体郊游一样,先各自从家出发到公司集合后,再同时出发到公园游玩,在指定地点集合后再同时开始就餐,… package javaplay.thread.test;import java.util.concurrent.CyclicBarrier;im...原创 2016-11-20 12:49:51 · 554 阅读 · 0 评论 -
Java多线程之线程并发库阻塞队列的应用
ArrayBlockingQueue(jdk中已经提供 就在那个condition类说明里的可阻塞示例程序的下面就说明了)注意三个添加方法的区别->查API文档 拿插入来说 一个会抛异常 一个返回true/false 一个会阻塞是记不住的 找到doc即可 把精力留出来吧阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同...原创 2016-11-20 13:27:46 · 523 阅读 · 0 评论 -
Java多线程之线程并发库同步集合类的应用
1. 简介在java.util.concurrent包的说明文档里有Executors/Queues/Timing/Synchronizers/Concurrent Collections整体介绍,一看便知传统集合类在并发访问时是有问题的,如HashMap并发访问时即有读有写时会进入死循环(http://blog.csdn.net/xuefeng0707/article/details/4...原创 2016-11-21 10:44:46 · 628 阅读 · 0 评论 -
Java多线程之创建线程的两种传统方式
package javaplay.thread.test;public class TraditionalThread { public static void main(String[] args) { // 第一种 Thread thread = new Thread() { @Override public void run() { while (true...原创 2016-11-16 22:45:35 · 372 阅读 · 0 评论