Java并发编程(十三)ThreadLocal
ThreadLocal锁可以保证一个变量被使用的时候,可以将其锁住,不让其他线程修改,那么引申到一个问题,可不可给每个线程都设置一个变量,让他们各自为营,以空间去换取时间呢?当然可以,于是乎就有了ThreadLocal这个新的方法,举例: 123456789101112131415161718192 ...
阅读更多
Java并发编程(十二)如何提高锁的性能
几种提高锁性能的方法减小锁持有的时间synchronized虽然可以保持原子性,但是大量的使用synchronized会使系统的整体性能下降,于是,我们可以只在需要上锁的时候上锁,对某些不改变系统数据的方法不上锁 1234567891011121314151617181920212223242526 ...
阅读更多
Java并发编程(十一)并发容器
并发容器一些常用的工具 ConcurrentHashMap:线程安全的hashmap。 CopyOnWriteArrayList:线程安全的ArrayList,比较适合读多写少的场合,完胜vector。 ConcurrentLinkedQueue:线程安全的队列,它们两之间的差别在于数据结构不一样, ...
阅读更多
Java并发编程(十)线程池
线程池线程池的基本使用创建一个线程池线程的每一次创建,最后的结果免不了都是销毁,那么在大型的系统的,就有着不断地创建和销毁,线程的创建和销毁开销是很大的,甚至在一些小的任务当中,创建和销毁的开销甚至超过了任务本身,那么,有方法可以去减少这种开销吗?设计者当然也想到了,于是乎有了线程池这个事物,使用线 ...
阅读更多
Java并发编程(九)同步控制
多线程的团队协作重入锁(ReentrantLock)什么是重入锁重入锁和synchronized非常的相似,我们知道synchronized的锁区域是用大括号所包围起来的,而ReentrantLock则是可以自己决定加锁的位置和解锁的位置的 12L.lock();L.unloock(); 1234 ...
阅读更多
Java并发编程(八)synchronized原理
synchronized原理synchronized的概念synchronized的简介synchronized是一个在Java中比较常见的锁。可以选择在代码中加入synchronized代码块,也可以在方法头加入synchronized的声明。 12345678910public class Sy ...
阅读更多
Java并发编程(七)Java内存模型
JAVA内存模型JMM内存模型我们常说的JVM内存模式指的是JVM的内存分区;而Java内存模式是一种虚拟机规范。 Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发 ...
阅读更多
Java并发编程(六)隐蔽的错误
隐蔽的错误在编程当中遇到错误,可能会让你头疼,但能提示出是哪里出现了某某错误,也许只是一两分钟就能解决的问题,最可怕的是,程序出错了,却没有任何提示,得自己慢慢的去找,在几十万行代码的工程当中,可能分分钟就猝死了。所以,写任何代码时,都要想一想各种会出现的问题,最简单的不可见错误如下: 1234in ...
阅读更多
Java并发编程(五)线程的管理
线程的管理当我们在一个系统中使用了非常之多的线程的时候,就非常不方便去管理,于是乎,设计者便设计了一个名为线程组的类,去好好的管理线程。线程组类的名字叫做ThreadGroup 12345ThreadGroup tg=new ThreadGroup("printGroup");//创建线程组Thre ...
阅读更多
Java并发编程(四)线程的基本使用2
Thread类的基本使用(二)线程的join(等待线程结束)和yield(谦让线程)线程的join方法的意思是,如果有对象在该线程中执行,但是又有别的线程要调用这个对象,join方法会让别的线程阻塞,直到该线程执行完毕为止。 123456789101112131415public class tes ...
阅读更多