- 浏览: 82849 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (89)
- 源码 (2)
- tomcat服务器连接数问题解决方法 (2)
- Android (26)
- JAVA 基本 (17)
- 设计模式 (6)
- Spring Struts Hibernate ibatis Web (9)
- 汇总小结 (1)
- 性能优化 (1)
- 小算法 (1)
- Android 异常 (1)
- Http web (1)
- Linux (4)
- C C++ (1)
- JNI ANDROID (1)
- UML (1)
- 其他 (1)
- 图像 (1)
- Spring (2)
- 分布式集群 (1)
- 数据库 (4)
- jquery (1)
- oracle和mysql 积累 (0)
- struts (1)
- 宕机 (1)
- mybaties (1)
- DH_Robot1_Chn_LeChange-Baby_V1.000.0005.3.R.160407.zip (0)
- 积累 (1)
- 架构 (1)
- 基础问题? (0)
- 111 (0)
最新评论
-
jbeduhai:
表达贴切,顶一个
ThreadLocal
Java 多线程程序设计要点:
http://www.diybl.com/course/3_program/java/javajs/20100522/203539.html
所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。
方法1:使用ThreadLocal
private final static ThreadLocal<Boolean> state = new ThreadLocal<Boolean>();
方法2:使用同步关键字synchronized
- public void setState(boolean state) {
- synchronized (this.state) {
- this.state = state;
- }
- }
方法3:使用锁
- public void setState(boolean state) {
- lock.lock();
- try {
- this.state = state;
- } finally {
- lock.unlock();
- }
- }
方法4:使用Atomic类型
private AtomicBoolean state = new AtomicBoolean();
用volatile修饰变量,不能实现类似的功能 volatile有可见性,但没有原子性 解释见下面:
转载 :http://www.iteye.com/topic/1124373
volatile只是在线程内存和“主”内存间同步某个变量的值,而synchronized通过锁定和解锁某个监视器同步所有变量的值。显然synchronized要比volatile消耗更多资源
public static volatile int n = 0 ; 1000
因是声明为volatile的简单变量如果当前值由该变量以前的值相关,那么volatile关键字不起作用,也就是说如下的表达式都不是原子操作:
n = n + 1 ;
n ++ ;
在使用volatile关键字时要慎重,并不是只要简单类型变量使用volatile修饰,对这个变量的所有操作都是原来操作,当变量的值由自身的上一个决定时,如n=n+1、n++ 等,volatile关键字将失效,只有当变量的值和自身上一个值无关时对该变量的操作才是原子级别的,如n = m + 1,这个就是原级别的。所以在使用volatile关键时一定要谨慎,如果自己没有把握,可以使用synchronized来代替volatile
- public class ThreadTest{
- public void test(){
- Object lock=new Object();
- synchronized (lock){ // 每个线程进来都会执行Object lock=new Object();每个线程都有自己的lock,根本不存在锁竞争
- //do something
- }
- }
- }
ThreadLocal与synchronized多线程并发访问区别1
http://www.easy518.com/bbs/?p=23
synchronized(core){ // 锁住对象!
core.put();
}
public synchronized void put(){// 锁住对象方法!
if (count>=3) {
System.out.println("生产者被阻塞");
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return;
}
count++;
this.notify();
}
java.lang.IllegalMonitorStateException
首先你要了解这个异常为什么会抛出,这个异常会在三种情况下抛出: 1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法; 2>当前线程不含有当前对象的锁资源的时候,调用obj.notify()方法。 3>当前线程不含有当前对象的锁资源的时候,调用obj.notifyAll()方法。
由线程引发的内存模型分析:
http://www.blogjava.net/qileilove/archive/2011/09/22/359262.html
http://jameswxx.iteye.com/blog/806968
http://guibin.iteye.com/blog/1172731
http://wenku.baidu.com/view/4afaaf2e453610661ed9f4dc.html
发表评论
-
JVM以及调优
2016-01-08 09:14 23931. http://blog.csdn.net/caih ... -
java 编译工程
2015-09-19 10:31 563有目录Java- ... -
类加载器
2012-08-09 12:43 7831 bootstrap ==== jre/lib/rt.ja ... -
OH 亲的缓存
2012-08-02 17:18 7111. http://wenku.baidu.com/vie ... -
java 基础测试
2012-07-25 19:57 7391, String string = nul ... -
基本算法排序
2011-05-25 10:58 703public class MaoPaoSort { ... -
Java对二进制与字符串转换
2011-05-16 14:04 922package test; import java. ... -
== String
2011-04-26 15:59 803public static void main(Str ... -
深入Java虚拟机:JVM中的Stack和Heap
2011-04-26 11:37 817在JVM中,内存分为两个 ... -
java scjp
2011-04-18 16:25 656String str1= "abc&qu ... -
c++ java 关键字
2011-04-01 09:16 1009JAVA:标有*号的是C++有相似作用的关键字 abstra ... -
ThreadLocal
2011-03-18 15:25 1322ThreadLocal ThreadLocal为解决多 ... -
singleton 模式
2011-03-18 14:01 819public class Singleton { ... -
ConcurrentHashMap
2011-03-16 14:02 717ConcurrentHashMap 分离锁和并发! -
scjp构造函数
2011-01-12 10:34 7821.子类继承父类带参数的构造函数 必须也有带参的构造函数。否则 ... -
scjp重载和重写
2011-01-12 10:27 824重载:1.必须不同参数列表且名字一定一样,其他不限制 2.可以 ...
相关推荐
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例).rar
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)完整源码
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)(十分经典)
C#C#多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)_26.rar
linux线程基本编程
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)(0520_).rar
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例).rar.
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)_《0528》.rar
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)(201903)
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)201902
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)_0520.rar