`

Lock

阅读更多
Lock

一、

1.


public class ThreadSynchronizedDemo {

	public static String name = "zhang" ;
	public static Integer age = 25 ;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		/**
		 * 预期输出:
		 * zhang : 25 
		 * li    : 24
		 * 实际输出:
		 * 各种组合,
		 * 原因:
		 * 线程的执行时无序的,谁先执行取决于谁先占用CPU
		 * 即,可能出现   先printDemo 打印一般的时候,ChangeDemo 生效修改了 其他的值
		 */
		new Thread(new PrintDemo()).start();
		new Thread(new ChangeDemo()).start();
	}

}

class PrintDemo implements Runnable{

	@Override
	public void run() {
		while(true){
			System.out.println("name:"+ThreadSynchronizedDemo.name+" age:"+ThreadSynchronizedDemo.age);
		}
	}
	
}

class ChangeDemo implements Runnable{

	@Override
	public void run() {
		while(true){
			if("zhang".equals(ThreadSynchronizedDemo.name)){
				ThreadSynchronizedDemo.name = "li";
				ThreadSynchronizedDemo.age = 24 ;
			}else{
				ThreadSynchronizedDemo.name = "zhang" ;
				ThreadSynchronizedDemo.age = 25 ;
			}
		}
	}
	
}


2.

public class ThreadSynchronizedDemo {

	public static String name = "zhang" ;
	public static Integer age = 25 ;
	
	public static void main(String[] args) {

		/**
		 * Synchronized:
		 * 代码块锁机制
		 * 1.锁加在哪:欲同步的位置
		 * 2.锁对象:
		 * 共享的资源/类的字节码 class / 某一不变的对象 private static final Object object
		 */
		new Thread(new PrintDemo()).start();
		new Thread(new ChangeDemo()).start();
	}

}

class PrintDemo implements Runnable{

	@Override
	public void run() {
		while(true){
			synchronized (ThreadSynchronizedDemo.class) {
				System.out.println("name:"+ThreadSynchronizedDemo.name+" age:"+ThreadSynchronizedDemo.age);
			}
		}
	}
	
}

class ChangeDemo implements Runnable{

	@Override
	public void run() {
		synchronized (ThreadSynchronizedDemo.class) {
			while(true){
				if("zhang".equals(ThreadSynchronizedDemo.name)){
					ThreadSynchronizedDemo.name = "li";
					ThreadSynchronizedDemo.age = 24 ;
				}else{
					ThreadSynchronizedDemo.name = "zhang" ;
					ThreadSynchronizedDemo.age = 25 ;
				}
			}
		}
	}
	
}
分享到:
评论

相关推荐

    Capslock++,Capslock键利器

    标题中的"Capslock++"指的是一个利用AutoHotkey脚本技术改造 Capslock 键的工具,旨在提升用户在计算机操作中的工作效率。Capslock键通常用于切换字母大小写,但通过 Capslock++,我们可以将其功能扩展到更高效的...

    lock(this)的使用说明

    "lock(this)的使用说明" lock(this)是C#语言中的一种同步机制,用于确保在多线程环境下对共享资源的访问安全。通过使用lock(this)语句,可以保证在同一时刻只有一个线程可以访问某个资源,防止多个线程同时访问同...

    AHK-CapsLock修改为回车-左手快捷键.ahk

    关键字-回车映射-ahk回车映射-左手回车 ;;快捷键x说明 上下左右 ... CapsLock+q 箭头上--防止误触屏-CapsLock+q也映射为箭头上 ;; CapsLock+e 删除键-删除前面的-Backspace ;; CapsLock+r 删除键-删除后面的--Del

    彻底搞清楚library cache lock的成因和解决方法

    ### 彻底理解 Oracle 中 Library Cache Lock 的成因与解决办法 #### 一、引言 在日常数据库管理工作中,经常会遇到一些让人头疼的问题,比如会话挂起(hang)。其中一个常见的情况是当用户尝试执行某些操作时,比如...

    lock4j高性能分布式锁 v2.2.6.zip

    《lock4j高性能分布式锁详解》 分布式锁是分布式系统中的关键组件,它在多节点共享资源时确保了数据的一致性和并发控制。lock4j作为一款高性能的分布式锁,为开发者提供了简单易用且高效的解决方案。本文将深入探讨...

    获去CapsLock键的状态

    在计算机使用过程中,CapsLock键是一个非常特殊的功能键,它用于切换输入的大写和小写字母。对于程序员或者日常用户来说,了解CapsLock键的状态有时是必要的,例如在编写代码时确保大小写的正确性,或者在输入密码时...

    判断Caps Lock键是否开/关

    标题中的“判断Caps Lock键是否开/关”指的是在编程或系统操作中,我们需要检测计算机上的Caps Lock(大写锁定)键是否处于开启或关闭状态。这个功能在各种应用场景中都可能用到,例如,为了确保用户在输入密码时...

    实现yarnlock与packagelockjson相互转换

    `yarn.lock` 和 `package-lock.json` 文件都是npm和yarn包管理器为了确保项目依赖一致性而生成的文件。本篇文章将详细探讨这两个文件的作用、差异以及如何实现它们之间的相互转换。 ### `yarn.lock` 文件 `yarn....

    Lock-in Amplifier.pdf

    significance of a lock-in amplifier. As an introduction to the subject there follows a simple intuitive account biased towards light measurement applications. All lock-in amplifiers, whether ...

    笔记本电脑大写键CAPSLOCK状态显示软件

    标题中的“笔记本电脑大写键CAPSLOCK状态显示软件”是指一个专为笔记本电脑设计的程序,该程序能够实时显示当前大写锁定键(CAPSLOCK)的状态。开发者使用C#编程语言创建了这个应用,这表明它基于.NET框架运行,并且...

    C#实操控制并发之Lock和Redis分布式锁

    本文将深入探讨C#中如何使用Lock和Redis分布式锁来解决并发问题,以秒杀系统为例进行阐述。 首先,让我们理解什么是并发控制。并发控制是指在多线程环境下确保数据的一致性和完整性,防止多个线程同时访问同一资源...

    redisson lock和tryLock 分布式锁简单练习

    redisson lock和tryLock 分布式锁简单练习

    folder-lock6 注册码

    Folder Lock 是一款非常流行的文件加密和隐私保护软件,它可以帮助用户轻松地锁定、隐藏或加密其重要的文件、照片、视频等个人数据。这款软件适用于多种操作系统,包括 Windows 和 macOS,并且具有高度的安全性和...

    JAVA Lock加锁实例

    Lock锁是对象锁,仅在同一对象中,锁才会生效。(不做论证) (以下场景皆为单例模式下运行) lock.lock()的加锁方式,会使后续请求的线程堵塞等待。(方案A) lock.tryLock()的加锁方式,不会堵塞,会立即返回加锁...

    解决ArcSDE版本lock问题

    ### 解决ArcSDE版本lock问题 #### 一、引言 在GIS(地理信息系统)领域,ArcSDE 是一种广泛使用的空间数据库引擎,它能够有效地管理大量的空间数据。然而,在实际操作过程中,用户可能会遇到...

    技嘉BIOS解锁CFG Lock AMIBCP.zip

    标题中的“技嘉BIOS解锁CFG Lock AMIBCP.zip”是指一项针对技嘉主板BIOS的修改操作,目的是解锁CFG Lock功能。CFG Lock是许多现代主板上的一项安全设置,用于防止用户非授权地更改CPU的超频选项,以保护系统稳定性和...

    NumLocker_v1.0_numlock_

    标题 "NumLocker_v1.0_numlock_" 暗示我们正在处理一个名为 "NumLocker" 的软件版本1.0,其主要功能可能与“numlock”键有关。描述中的 "lock num" 提示该软件可能专注于锁定或管理计算机键盘上的数字锁定(NumLock...

    windows caps lock键映射ctrl(或shift)

    标题 "Windows 中 Caps Lock 键映射到 Ctrl (或 Shift)" 涉及的是操作系统中的一个自定义设置,主要是为了提高程序员和其他用户的工作效率。在默认情况下,Caps Lock 键用于切换大写和小写字母,但对于许多人来说,...

    c#线程 lock用法

    `lock`语句是C#中用于实现线程同步的重要工具,主要是为了解决多个线程并发访问共享资源时可能出现的竞争条件(race condition)问题。在描述的场景中,`lock`关键字被用来确保在同一时间只有一个线程可以访问特定的...

Global site tag (gtag.js) - Google Analytics