synchronized(this)

  此时,线程获得的是对象锁.例如:

 public class Thread8 extends Thread {

     public void sync_fun() {
synchronized (this) {
int i = ;
while (i-- > ) {
System.out
.println(Thread.currentThread().getName() + " : " + i);
try {
Thread.sleep();
} catch (InterruptedException ie) {
}
}
}
}
public static void main(String args[]) {
final Thread8 t8 = new Thread8();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
t8.sync_fun();
}
}, "t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
t8.sync_fun();
}
}, "t2");
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
t8.sync_fun();
}
}, "t3");
Thread t4 = new Thread(new Runnable() {
@Override
public void run() {
t8.sync_fun();
}
}, "t4");
Thread t5 = new Thread(new Runnable() {
@Override
public void run() {
t8.sync_fun();
}
}, "t4");
Thread t6 = new Thread(new Runnable() {
@Override
public void run() {
t8.sync_fun();
}
}, "t4");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
}
}

结果:

t1 : 4
t1 : 3
t1 : 2
t1 : 1
t1 : 0
t4 : 4
t4 : 3
t4 : 2
t4 : 1
t4 : 0
t4 : 4
t4 : 3
t4 : 2
t4 : 1
t4 : 0
t4 : 4
t4 : 3
t4 : 2
t4 : 1
t4 : 0
t3 : 4
t3 : 3
t3 : 2
t3 : 1
t3 : 0
t2 : 4
t2 : 3
t2 : 2
t2 : 1
t2 : 0

当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。在对象级使用锁通常是一种比较粗糙的方法。为什么要将整个对象都上锁,而不允许其他线程短暂地使用对象中其他同步方法来访问共享资源?如果一个对象拥有多个资源,就不需要只为了让一个线程使用其中一部分资源,就将所有线程都锁在外面。由于每个对象都有锁,可以如下所示使用虚拟对象来上锁:

 class FineGrainLock {

    MyMemberClass x, y;
Object xlock = new Object(), ylock = new Object(); public void foo() {
synchronized(xlock) {
//access x here
} //do something here - but don't use shared resources synchronized(ylock) {
//access y here
}
} public void bar() {
synchronized(this) {
//access both x and y here
}
//do something here - but don't use shared resources
}
}

synchronized(4)修饰语句块之:synchronized(this)的更多相关文章

  1. synchronized(5)修饰语句块之:synchronized(XXX.class)

    synchronized(XXX.class)有两种写法 synchronized(XXX.class)或者synchronized(obj.getClass()) Class也是一个类xxx.cla ...

  2. synchronized(3)修饰语句块之:synchronized(一般对象)

    synchronized(一般对象) 一次只有一个线程进入该代码块.此时,线程获得的是成员锁.例如: public class Thread7 { private Object xlock = new ...

  3. synchronized(1)用法简介:修饰方法,修饰语句块

    注意: 同一个对象或方法在不同线程中才出现同步问题,不同对象在不同线程互相不干扰. synchronized方法有2种用法:修饰方法,修饰语句块 1.synchronized方法 是某个对象实例内,s ...

  4. java synchronized修饰普通方法,修饰静态方法,修饰代码块,修饰线程run方法 比较

    synchronized用于多线程设计,有了synchronized关键字,多线程程序的运行结果将变得可以控制.synchronized关键字用于保护共享数据. synchronized实现同步的机制 ...

  5. synchronized修饰普通方法,修饰静态方法,修饰代码块,修饰线程run方法 比较

    synchronized用于多线程设计,有了synchronized关键字,多线程程序的运行结果将变得可以控制.synchronized关键字用于保护共享数据. synchronized实现同步的机制 ...

  6. 2.2synchronized同步语句块

    使用synchronized虽然能够避免不同步的现象出现,但是也会出现弊端,比如代码执行时间过长,那么其他线程就必须等待该线程执行完毕释放锁之后才能拿到锁. 面对这种问题可以使用同步代码块来解决. 2 ...

  7. 牛客网Java刷题知识点之同步方法和同步代码块的区别(用synchronized关键字修饰)

    不多说,直接上干货! 扩展博客 牛客网Java刷题知识点之多线程同步的实现方法有哪些 为何要使用同步?      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查 ...

  8. synchronized(修饰方法和代码块)

    synchronized(修饰方法和代码块) 1. 含义 synchronized 是同步锁,用来实现互斥同步. 在 Java 中,关键字 synchronized 可以保证在同一个时刻,只有一个线程 ...

  9. java多线程(三)——锁机制synchronized(同步语句块)

    用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法之行一个长时间的任务,那么B线程必须等待比较长的时间,在这样的情况下可以使用synchronized同步语句快来解 ...

随机推荐

  1. 单点登录cas常见问题(二) - 子系统是否会频繁訪问cas中心?

    这个问题的完整描写叙述是:用户成功登陆后.在訪问子系统的受限资源时,还须要訪问cas中心么,即子系统是否还会频繁訪问cas中心.cas中心会不会压力太大? 答案是:不会. 假设用户通过子系统A登录了c ...

  2. gbk转utf-8 iconv 编码转换

    linux以下有时候 字符须要进行编码转换(爬虫将gbk转为utf-8编码...).一般能够选择iconv函数. 终端以下  输入 man 3 iconv 得到  iconv函数的用法. 个人看习惯了 ...

  3. 积跬步,聚小流------ps有用小技巧,改变png图标颜色

    *  实现效果: 原图:  改动后: *  实现目的: 满足为实现不同界面色彩搭配改动png图标的颜色 *  实现方法: 1.打开Photoshop工具,导入须要进行改动的png图标: 2.对导入的图 ...

  4. 【Mongodb教程 第十二课 】PHP mongodb 的使用

    mongodb 不用过多的介绍了,NOSQL的一种,是一个面向文档的数据库,以其方便灵活的数据结构,对于开发者来说是比较友好的,同时查询的速度也是比较快的,现在好多网站 开始使用mongodb ,具体 ...

  5. mysql字段A复制到字段B,并替换指定字符

    ',字段a); eg:update `hy_b_pro` set goldWeight=jinJinZhong;

  6. ssh配置无password登录

    前提.机器A,B,均为RedHat Linux操作系统,均实用户user 1.以usernameuser登录,在A机器上运行 ssh-keygen -t rsa 一路回车.不须要输入password ...

  7. 关于 iOS 的 StoryBoard,接受的那一刻才发现她的美 - 当然美的事物都须要业心照料

    关于 iOS 的 StoryBoard,接受的那一刻才发现她的美 - 当然美的事物都须要业心照料 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循&quo ...

  8. UISlider无法拖动进度条的问题解决

    UISlider无法拖动进度条的问题解决 最近业务中的视频播放使用到了UISlider,但是有一个奇怪的问题,就是在Modar出来的控制器中UISlider是可以正常使用的,但是在Push出来的控制器 ...

  9. 查看android-support-v4.jar引出的问题

    1.前面博文里也写过如何关联android-support-v4.jar的源码 今天新项目用上述方法的时候,竟然不成功..来回反复试了很长时间,最后发现 新建项目,会自动引用一个类库(自动新建的..) ...

  10. /dev/zero和/dev/null的区别

    http://www.cnblogs.com/jacktu/archive/2010/06/28/1766791.html /dev/zero和/dev/null的区别   使用/dev/null 把 ...