`
wang吖
  • 浏览: 239927 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java多线程-对象锁Synchronized之我见

阅读更多

正确理解Java中的多线程多Synchronized对我们学习多线程编程非常重要,下面的测试程序阐述了Java对象锁的特性,例子如下

Coding:

 

/**
 * 该例子程序是为了理解Java线程里面提供的同步关键字 synchronized 对象锁 synchronized
 * 获取的是对象锁,我们可以理解为对象的锁就一把,一旦一根线程获取之后另外一根线程就只能等待 以下的模拟是:
 * 
 * 当一根线程进入一个对象的synchrozied方法之后,另外的线程将无法同时在进入该
 * 对象其它的synchronized方法,但是可以进入该对象的其它非synchronized
 * 
 * 测试注意事项:
 * <li>1、由于线程执行的随机性,只要获取到锁的线程进入睡眠状态则其它线程就不能在其释放锁之前进入其它的同步方法</li>
 * <li>2、当狗开始叫先执行,那么吃的执行就会一直要等到叫执行完之后才能执行,而摇尾巴的方法不会受到锁的限制</li>
 * <li>3、调试可以自己修改随意选择一个休眠的线程,然后分析打印结果</li>
 * 
 * @author 吖大哥
 * @date Jun 1, 2014 4:43:17 PM
 */
public class ThreadTester {

	public static void main(String[] args) {

		// 前提同一只狗在同一时刻他的嘴巴只能干一件事,当然你一定要认为它边吃还能边叫,那我也没办法
		final DogAction dog = new DogAction("哈士奇0001");

		// 狂叫线程
		new Thread(new Runnable() {
			public void run() {
				dog.barking();
			}
		}).start();

		// 狂吃线程
		new Thread(new Runnable() {
			public void run() {
				dog.eating();
			}
		}).start();

		// 狂摇尾巴
		new Thread(new Runnable() {
			public void run() {
				dog.tailing();
			}
		}).start();
	}
}

// 狗的行为类
class DogAction {

	private String name;

	public DogAction(String name) {
		this.name = name;
	}

	public synchronized void barking() {
		try {
			System.out.println("----------------已获得锁啦----------------");
			Thread.currentThread().sleep(6000);
			System.out.println(name + "正在狂叫**************");
			System.out.println("----------------已释放锁啦----------------");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public synchronized void eating() {
		try {
			// Thread.currentThread().sleep(6000);
			System.out.println(name + "正在狂吃**************");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void tailing() {
		try {
			Thread.currentThread().sleep(200);
			System.out.println(name + "正在狂摇尾巴**************");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 执行结果:

----------------已获得锁啦----------------
哈士奇0001正在狂摇尾巴**************
哈士奇0001正在狂叫**************
----------------已释放锁啦----------------
哈士奇0001正在狂吃**************

 

执行中截图:



 

 

  • 大小: 129.1 KB
分享到:
评论

相关推荐

    java 多线程synchronized互斥锁demo

    标题中的"java 多线程synchronized互斥锁demo"指的是一个示例,展示了如何在多线程环境下使用`synchronized`关键字创建互斥锁,确保同一时间只有一个线程可以访问特定的代码块或方法。 描述中的"一个多线程访问的同...

    Java 多线程与并发(4-26)-关键字- synchronized详解.pdf

    "Java 多线程与并发(4-26)-关键字- synchronized详解" Java 多线程与并发中的 synchronized 关键字是实现同步块的互斥访问和线程的阻塞及唤醒等工作的重要工具。下面将对 synchronized 关键字进行详细分析。 ...

    JAVA线程高级-线程按序交替执行

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

    java多线程的条件对象和锁对象demo

    本示例"java多线程的条件对象和锁对象demo"着重探讨了如何利用锁对象和条件对象来精细控制线程的执行流程。 首先,我们需要了解Java中的锁对象。Java提供了多种类型的锁,其中最基础的是`synchronized`关键字,它...

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    Java多线程-线程的安全问题与线程的同步机制介绍

    Java多线程-线程的安全问题与线程的同步机制介绍 在 Java 多线程编程中,线程安全问题是非常重要的一个话题。当多个线程访问同一个资源时,如果只有读操作那么不会出现线程安全问题,但是如果多个线程对资源进行读...

    Java多线程-生产者与消费者问题

    ### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...

    java锁机制Synchronizedjava锁机制Synchronized

    Java 锁机制 Synchronized 是 Java 语言中的一种同步机制,用于解决多线程并发访问共享资源时可能出现的一些问题。 Java 锁机制 Synchronized 的概念 在 Java 中,每个对象都可以被看作是一个大房子,其中有多个...

    Java多线程-同步机制解决线程安全问题方式一:同步代码块

    Java多线程编程中,线程安全问题是常见的挑战,特别是在并发环境下,多个线程可能会同时访问和修改同一份共享资源,导致数据不一致。为了解决这个问题,Java提供了同步机制,其中一种常用的方式就是同步代码块...

    Java的多线程-线程间的通信.doc

    在Java多线程编程中,线程间的通信是非常重要的概念,用于协调多个并发执行的任务。线程的状态转换是理解线程通信的基础,主要包括四个状态:新(New)、可执行(Runnable)、死亡(Dead)和停滞(Blocked)。新状态...

    Java多线程-线程间的通信

    ### Java多线程—线程间的通信 #### 一、线程间的通信 ##### (1)为什么要处理线程间的通信? 在多线程环境中,不同的线程可能需要协同工作来完成一项任务。例如,一个线程负责生产数据,另一个线程负责消费这些...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    java多线程源码-source

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。接下来,我们将深入探讨这两个方法以及相关的...

    4JAVA编程高级-多线程编程

    ### JAVA编程高级-多线程编程 #### 一、多线程简介 多线程编程是一种软件技术,它允许在单个程序内并发执行多个控制流。这种技术极大地提高了程序的执行效率和响应能力,特别是在现代多核处理器环境中。本文档主要...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    java基础--11.多线程-1

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应性。本节我们将深入探讨Java中的多线程概念,包括其重要性、创建方法以及相关机制。 一、多线程的重要性 1....

    JAVA单线程多线程

    通过以上分析,我们可以看到,在Java中合理利用单线程或多线程以及`synchronized`关键字能够有效地提高程序的性能和响应能力,同时也需要注意其可能带来的复杂性和资源消耗问题。开发者应根据具体的应用场景和需求来...

    Java多线程synchronized关键字详解(六)共5

    总结来说,`synchronized`关键字在Java多线程编程中扮演着关键角色,确保了线程安全和数据一致性。然而,正确理解和使用它是至关重要的,避免滥用并结合其他并发控制手段,才能编写出高效且健壮的多线程程序。在实际...

    Java多线程高并发篇(一)--重入锁

    在Java多线程高并发编程中,重入锁(ReentrantLock)是一个至关重要的概念,它提供了比Java内置锁(synchronized)更细粒度的控制,并且具有更高的可读性和可扩展性。本篇文章将深入探讨重入锁的相关知识点。 首先...

Global site tag (gtag.js) - Google Analytics