`
woxiaoe
  • 浏览: 284484 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java线程学习笔记(六)在其他对象上同步

    博客分类:
  • Java
阅读更多
package com.woxiaoe.study.thread;

class DualSynch{
	private Object syncObject = new Object();
	public synchronized void f(){
		for(int i = 0; i < 5; i++){
			System.out.println("f()");
			Thread.yield();
		}
	}
	public void g(){
		synchronized (this) {
			for(int i = 0; i < 5; i++){
				System.out.println("g()");
				Thread.yield();
			}
		}
	}
}
public class SyncObject {
	public static void main(String[] args) {
		final DualSynch ds = new DualSynch();
		new Thread(){
			public void run() {
				ds.f();
			};
		}.start();
		ds.g();
	}
}

 Output:

g()
g()
g()
g()
g()
f()
f()
f()
f()
f()

synchronized快必须给定一在其上进行同步的对象,并且最合理的方式是,使用其方法正在被调用的当前对象:synchronized(this),就如上面代码所示,在这种方式中,如果获得了synchronized快上的锁,那么该对象其他的synchronized方法和临界区就不能被调用了.就如上面的代码,因为g()中位对当前对象(this)同步,所以f()方法要等到其执行往后再执行。

如果我们把this改为syncObject 那么这是的输出就为:

g()
f()
g()
f()
g()
f()
g()
f()
g()
f()
即二者同时运行。这种方式必须确保所有相关的任务都是在同一个对象上同步的。

 

1
0
分享到:
评论
1 楼 wuzhihui001 2012-01-06  
11.    public void g(){  
12.        synchronized (this) {  
13.            for(int i = 0; i < 5; i++){  
14.                System.out.println("g()");  
15.                Thread.yield();  
16.            }  
17.        }  
18.    }  
19.} 


根据输出结果: 12行同步的不应该是同步对象自己  应该改成  synchronized (syncObject)

相关推荐

    java线程学习笔记

    Java 线程学习笔记 Java 线程创建有两种方法: 1. 继承 Thread 类,重写 run 方法:通过继承 Thread 类并重写 run 方法来创建线程,这种方法可以使线程具有自己的执行逻辑。 2. 实现 Runnable 接口:通过实现 ...

    JAVA 多线程学习笔记

    这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...

    多线程学习笔记

    多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...

    Java基础 学习笔记 Markdownr版

    4. 多线程:在10多线程.md中,介绍了如何创建和管理Java线程,包括Thread类、Runnable接口,以及同步机制如synchronized关键字、wait()、notify()和notifyAll()方法。多线程技术是实现并发执行的关键,有助于提高...

    java多线程笔记

    本文将深入探讨Java线程的概念、原理以及如何在实际编程中进行有效管理。 首先,我们要了解操作系统中的线程和进程。进程是运行中的程序实例,每个进程都有自己的内存空间和系统资源,而线程则是进程内的执行单元,...

    Java多线程学习笔记

    ### Java多线程学习笔记 #### 一、线程的基本概念 在计算机科学中,**线程**(Thread)是程序执行流的最小单位。一个标准的程序只能做一件事情,而通过多线程技术,可以让程序同时处理多个任务。在Java中,线程是...

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    java学习笔记markdown

    【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...

    Java分布式应用学习笔记05多线程下的并发同步器

    ### Java分布式应用学习笔记05多线程下的并发同步器 #### 1. 前言 在现代软件开发中,特别是在分布式系统和高性能计算领域,有效地管理多线程之间的协同工作至关重要。Java语言提供了丰富的工具和API来帮助开发者...

    Java分布式应用学习笔记03JVM对线程的资源同步和交互机制

    ### Java分布式应用学习笔记03:JVM对线程的资源同步和交互机制 在深入探讨Java虚拟机(JVM)如何处理线程间的资源同步与交互机制之前,我们先来明确几个关键概念:线程、多线程、同步、并发以及它们在Java中的实现...

    Java开发学习笔记

    Java开发学习笔记主要针对的是初学者,旨在帮助他们掌握Java编程的基础知识。下面将详细讲解Java开发中的核心概念和步骤。 一、Java环境变量设置 在开始Java编程之前,我们需要安装Java Development Kit (JDK)并...

    Java中线程同步和线程协作学习笔记

    为了解决这个问题,我们可以在访问临界资源的方法上使用`synchronized`关键字,这样在任何时刻只有一个线程能获取到对象监视器并执行相关代码,其他线程必须等待。这就像厕所里的毛巾,只有拿到毛巾的人才能使用厕所...

    java多线程学习笔记

    Java提供了Thread类的一些方法来控制线程,如sleep()使线程暂停指定时间,yield()让当前线程暂停并让其他相同优先级的线程有机会运行,join()使当前线程等待指定线程结束后再继续。 同步机制是Java多线程中防止数据...

    Java学习笔记PPT

    总的来说,这份"Java学习笔记PPT"是初学者和进阶者学习Java的理想资料,覆盖了语言基础、面向对象、集合框架、异常处理、I/O系统、多线程等多个方面,旨在帮助读者系统地掌握Java编程技能,并能灵活运用到实际项目中...

    JAVA学习笔记 林信良

    《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...

    Java线程编程学习笔记(二)

    这篇“Java线程编程学习笔记(二)”很可能是对Java并发编程深入探讨的一部分,特别是涉及多线程示例的实践应用。我们将从标题、描述以及标签来推测可能涵盖的知识点,并结合"Multi-Threads Demo"这一压缩包文件名来...

    java多线程笔记全手打

    本笔记全面涵盖了多线程的学习,包括基础理论和实践代码,旨在帮助开发者深入理解并掌握Java多线程技术。 一、线程基础知识 线程是操作系统分配CPU时间的基本单位,一个进程中可以包含多个线程。Java通过`Thread`类...

Global site tag (gtag.js) - Google Analytics