Java中Synchronized的用法

  • 时间:
  • 浏览:0
  • 来源:uu快3概率_uu快3官网pk10_平台

Synchronized作用于整个法律依据 的写法。

写法一:

Thread2:60 00.0

Thread1:60 00.0

Thread4:60 00.0

Thread0:60 00.0

结果如下:

SyncThread1:0

SyncThread1:1

SyncThread1:2

SyncThread1:3

SyncThread1:4

SyncThread2:5

SyncThread2:6

SyncThread2:7

SyncThread2:8

SyncThread2:9*

朋友知道静态法律依据 是属于类的而不属于对象的。同样的,synchronized修饰的静态法律依据 锁定的是你这俩 类的所有对象。朋友对Demo1进行这俩 修改如下:

在AccountOperator 类中的run法律依据 里,朋友用synchronized 给account对象加了锁。这时,当一另有一个程序运行访问account对象时,这俩 试图访问account对象的程序运行将会阻塞,直到该程序运行访问account对象开始英语 英语 英语 。也以后说谁拿到那个锁谁就不需要 运行它所控制的那段代码。

当一另有一个明确的对象作为锁时,就不需要 用例如下面曾经的法律依据 写程序运行。

参考资料:

http://blog.csdn.net/chenguang79/article/details/677720http://developer.51cto.com/art/60 906/132354.htm

结果如下:

在用synchronized修饰法律依据 需要注意以下几点:

synchronized是Java中的关键字,是一种生活同步锁。它修饰的对象有以下几种:

2.当一另有一个程序运行访问对象的一另有一个synchronized(this)同步代码块时,曾经程序运行仍然不需要 访问该对象中的非synchronized(this)同步代码块。

【Demo2】:多个程序运行访问synchronized和非synchronized代码块

其效果和【Demo5】是一样的,synchronized作用于一另有一个类T时,是给你这俩 类T加锁,T的所有对象用的是同一把锁。

**

在子类法律依据 中去掉 synchronized关键字

Synchronized修饰一另有一个法律依据 很简单,以后在法律依据 的前面加synchronized,public synchronized void method(){//todo}; synchronized修饰法律依据 和修饰一另有一个代码块例如,以后作用范围不一样,修饰代码块是大括号括起来的范围,而修饰法律依据 范围是整个函数。如将【Demo1】中的run法律依据 改成如下的法律依据 ,实现的效果一样。

当没办法 明确的对象作为锁,以后想让一段代码同步时,不需要 创建一另有一个特殊的对象来充当锁:

调用代码:

原文:http://blog.csdn.net/luoweifu/article/details/466160 15

作者:luoweifu

转载请标名出处

在子类法律依据 中调用父类的同步法律依据

写法二:

完正全是说一另有一个程序运行执行synchronized代码块时其它的程序运行受阻塞吗?为那先 顶端的例子中thread1和thread2并肩在执行。这是将会synchronized只锁定对象,每个对象只一另有一个锁(lock)与之相关联,而顶端的代码等同于下面这段代码:

Thread3:60 00.0

调用代码:

结果如下:

调用代码:

*【Demo4】:synchronized修饰一另有一个法律依据

当一另有一个并发程序运行(thread1和thread2)访问同一另有一个对象(syncThread)中的synchronized代码块时,在同一时刻没办法 一另有一个程序运行得到执行,曾经程序运行受阻塞,需要等待时间当前程序运行执行完你这俩 代码块以后不需要 执行该代码块。Thread1和thread2是互斥的,将会在执行synchronized代码块全是锁定当前的对象,没办法 执行完该代码块不需要 释放该对象锁,下一另有一个程序运行不需要 执行并锁定该对象。

朋友再把SyncThread的调用稍微改一下:

原文:http://blog.csdn.net/luoweifu/article/details/466160 15

作者:luoweifu

转载请标名出处

这时创建了一另有一个SyncThread的对象syncThread1和syncThread2,程序运行thread1执行的是syncThread1对象中的synchronized代码(run),而程序运行thread2执行的是syncThread2对象中的synchronized代码(run);朋友知道synchronized锁定的是对象,这全是有两把锁分别锁定syncThread1对象和syncThread2对象,而这两把锁是互不干扰的,不形成互斥,这俩 一另有一个程序运行不需要 并肩执行。

SyncThread1:2

SyncThread1:3

SyncThread1:4

SyncThread2:5

SyncThread2:6

SyncThread2:7

SyncThread2:8

SyncThread2:9

朋友把Demo5再作这俩 修改。

【Demo6】:修饰一另有一个类

Synchronized还可作用于一另有一个类,用法如下:

B count:1

A:1

B count:2

A:2

B count:3

A:3

B count:4

A:4

B count:5

SyncThread的调用:

说明:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。

【Demo5】:synchronized修饰静态法律依据

A:0

《编程思想之多程序运行与多程序运行(1)——以操作系统的深层述说程序运行与程序运行》一文完正讲述了程序运行、程序运行的关系及在操作系统中的表现,这是多程序运行学习需要了解的基础。本文将接着讲一下Java程序运行同步中的一另有一个重要的概念synchronized.

结果如下:

Synchronized也可修饰一另有一个静态法律依据 ,用法如下:

写法一修饰的是一另有一个法律依据 ,写法二修饰的是一另有一个代码块,但写法一与写法二是等价的,完正全是锁定了整个法律依据 时的内容。

顶端代码中countAdd是一另有一个synchronized的,printCount是非synchronized的。从顶端的结果中不需要 看出一另有一个程序运行访问一另有一个对象的synchronized代码块时,别的程序运行不需要 访问该对象的非synchronized代码块而不受阻塞。

【Demo1】:synchronized的用法

SyncThread2:1

SyncThread1:2

SyncThread2:3

SyncThread1:4

SyncThread2:5

SyncThread2:6

SyncThread1:7

SyncThread1:8

SyncThread2:9

结果如下:

SyncThread1:0

SyncThread1:1

SyncThread1:0

A. 无论synchronized关键字去掉 法律依据 上还是对象上,将会它作用的对象是非静态的,则它取得的锁是对象;将会synchronized作用的对象是一另有一个静态法律依据 或一另有一个类,则它取得的锁是对类,该类所有的对象同一把锁。

B. 每个对象只一另有一个锁(lock)与之相关联,谁拿到你这俩 锁谁就不需要 运行它所控制的那段代码。

C. 实现同步是要很大的系统开销作为代价的,甚至将会造成死锁,这俩 尽量正确处理无谓的同步控制。

【Demo3】:指定要给某个对象加锁

syncThread1和syncThread2是SyncThread的一另有一个对象,但在thread1和thread2并发执行时却保持了程序运行同步。这是将会run中调用了静态法律依据 method,而静态法律依据 是属于类的,这俩 syncThread1和syncThread2共要 用了同一把锁。这与Demo1是不同的。