在这里插入图片描述

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间: 2013-11-27 | 标题:《Java编程思想》读书笔记:synchronized | 分类: 编程 / java / think_in_java | 标签: java · think in java · 多线程 · synchronized


《Java编程思想》读书笔记:synchronized

整理 Java 多线程相关技术,这里备份 synchronized 关键字的使用代码,展示方法级和代码块级两种同步方式。

GitHub: https://github.com/cstriker1407/think_in_java

SyncTest.java

public class SyncTest
{
	private static SyncTest instance = new SyncTest();
	public static void test()
	{
		new Thread(new Runnable()
		{
			@Override
			public void run()
			{
				for (int i = 0; i < 5; i++)
				{
					instance.funA();
					try {
						Thread.sleep(1);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		new Thread(new Runnable()
		{
			@Override
			public void run()
			{
				for (int i = 0; i < 5; i++)
				{
					instance.funB();
					try {
						Thread.sleep(1);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();	
	}
	public synchronized void funA()
	{
		System.out.println("A start");
		try {
			Thread.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("A end");
	}
	public void funB()
	{
		synchronized (this)
		{
			System.out.println("B start");
			try {
				Thread.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("B end");
		}
	}
}

部分日志输出

A start
A end
B start
B end
A start
A end
B start
B end
A start
A end
B star

备注

funA() 使用 synchronized 修饰方法,funB() 使用 synchronized(this) 代码块,两者锁的对象相同(当前实例),互斥效果一致。日志显示 A start/end 和 B start/end 不会交错出现。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐