您的位置:首页 > 其它

线程—synchronized、volatile

2016-07-18 15:19 281 查看
线程 : 是操作系统能够进行运算调度的最小单位。它 被包含在进程之中,是进程中的实际运作单位。

一 条线 程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行

不同 的任务。

线程的声明周期

新建(New)->就绪(Runnable)->运行(Running)->阻塞(Block)->死亡(Dead)

3.synchronized当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行

该段代码。

synchronized锁的使用方法

注意加锁会降低效率,所有存在一个加锁层级的问题:

1.代码锁,对代码级进行加锁

2.方法锁,对方法进行加锁

3.对象锁,对对象的所有资源进行加锁

synchronized后传的参数是加锁对象,就是说锁与这个对象绑定,

锁并不单独存在,一个对象只能绑定一个锁

for (int i = 0; i < 100; i++) {

new Thread(new Runnable() {

@Override

public void run() {

synchronized(对象){需要加锁的代码}

synchronized (this) {

count = count + 1;

}

}

}).start();

volatile

1、volatile关键字为域变量的访问提供了一种免锁机制

2、使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新

3、因此每次使用该域就要重新计算,而不是使用寄存器中的值

4、volatile不会提供任何原子操作,它也不能用来修饰final类型的变量

volatile static int count = 0;

for (int i = 0; i < 100; i++) {

new Thread(new Runnable() {

public void run() {

count++;

}

}).start();

先让线程休眠一秒钟

try {

Thread.sleep(1 * 1000);

} catch (Exception e) {

e.printStackTrace();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: