文档章节

synchronized块

Chain
 Chain
发布于 2014/09/29 22:44
字数 214
阅读 12
收藏 0

synchronized块相对于方法声明加synchronized关键字,更加灵活

例子

public class FetchRunnable implements Runnable{

	private String TAG_1 = new String("TAG_1");//锁this
	private static String TAG_2 = new String("TAG_2");//锁class
	private String TAG_3 = "TAG_3";//锁class
	
	public void run() {
		//runClass();
		//runThis();
		runTag(TAG_1);
		sleep();
		runTag(TAG_2);
		sleep();
		runTag(TAG_3);
	}
	
	private void runClass() {
		synchronized (FetchRunnable.class) {
			System.out.println("run Class");
			sleep();
		}
	}
	
	private void runThis() {
		synchronized (this) {
			System.out.println("run this");
			sleep();
		}
	}
	
	private void runTag(String tag) {
		synchronized (tag) {
			System.out.println(Thread.currentThread().getName() + " run " + tag +" 秒="+Calendar.getInstance().get(Calendar.SECOND));
			sleep();
		}
	}

	private void sleep() {
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		Thread t0 = new Thread(new FetchRunnable());
		Thread t1 = new Thread(new FetchRunnable());
		t0.start();
		t1.start();
	}
}

运行结果

Thread-0 run TAG_1 秒=18
Thread-1 run TAG_1 秒=18
Thread-1 run TAG_2 秒=20
Thread-0 run TAG_2 秒=21
Thread-1 run TAG_3 秒=22
Thread-0 run TAG_3 秒=23

© 著作权归作者所有

共有 人打赏支持
Chain
粉丝 5
博文 92
码字总数 52216
作品 0
朝阳
多线程学习笔记(八)

注: 当一个线程执行的代码出现异常时,其所持有的锁会自动释放 同步不具有继承性 不在synchronized块中就是一部执行,在synchronized中就是同步执行 和synchronized方法一样,synchronized(thi...

scymore
2016/09/07
11
0
Java多线程学习(三)

用关键字synchronized声明方法是有弊端的。 synchronized同步代码块的使用:当两个并发线程访问桶一个对象object中的synchronized(this)同步代码块是,一段时间内只能有一个线程被执行,另...

kakayang2011
2016/03/01
64
0
java synchronized 关键字详解

Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步...

alonelywolf
2015/12/30
115
0
java并发编程(1)——synchronized关键字解析

synchronized是Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchro...

十二缸帕萨特
2014/04/12
0
0
Java 同步方式 (1) —— synchronized

前两篇博客 ArrayList 用法比较 和 String 用法比较,介绍过程中都提及到了同步和线程安全的问题,本篇将重点介绍Java同步方式之一的synchronized用法。 线程安全 线程安全,是指每次运行结果...

长平狐
2013/01/06
75
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
35分钟前
1
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
40分钟前
1
0
大数据学习脑图以及入门教程!

近些年,大数据的火热可谓是技术人都知道啊,很多人呢,也想学习大数据相关,所以,这里分享几个大数据脑图,希望可以让你清楚明白从哪里入门大数据,知道该学习以及掌握哪些知识点; 大数据...

董黎明
今天
1
0
聊聊redis的监控工具

序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行 docker r...

go4it
今天
2
0
TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部