`

多线程之对象锁和类锁

阅读更多
  • 多个线程多个锁,一个对象就有一把锁
  • 类锁,static修饰

    

示例:

 

package com.zan;
/**
 * 关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,
 * 所以代码中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock),
 * 
 * 在静态方法上加synchronized关键字,表示锁定.class类,类一级别的锁(独占.class类)。
 *
 */
public class MultiThread {

	private static int num = 0;
	
	// static 
	public static synchronized void print(String flag){
		try {
			
			if(flag.equals("a")){
				num = 100;
				System.out.println("falg a, set 100 over!");
				Thread.sleep(1000);
			} else {
				num = 200;
				System.out.println("flag b, set 200 over!");
			}
			
			System.out.println("flag " + flag + ", num = " + num);
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	
	public static void main(String[] args) {
		
		
		final MultiThread m1 = new MultiThread();
		final MultiThread m2 = new MultiThread();
		
	  new Thread(new Runnable() {
		
			@Override
			public void run() {
				m1.print("a");
			}
		},"t1").start();
		
		 new Thread(new Runnable() {
			@Override 
			public void run() {
				m2.print("b");
			}
		 },"t2").start();		
	
		
	}
	
	
	
	
}

 运行结果:

 



 

 

 

  • 大小: 7.5 KB
0
0
分享到:
评论

相关推荐

    .net面向对象之多线程(Multithreading)及 多线程高级应用

    多线程同步,使用线程锁和线程通知实现线程同步,具体内容介绍如下: 1、 ThreadStatic特性 特性:[ThreadStatic] 功能:指定静态字段在不同线程中拥有不同的值 在此之前,我们先看一个多线程的示例: 我们定义一个...

    python多线程高级锁condition简单用法示例

    本文实例讲述了python多线程高级锁condition简单用法。分享给大家供大家参考,具体如下: 多线程编程中如果使用Condition对象代替lock, 能够实现在某个事件触发后才处理数据, condition中含有的方法: – wait:线程...

    Java多线程与并发-原理

    文章目录synchronized线程安全主要诱因互斥锁特性获取对象锁同对象,异步同对象,同步代码块同对象,非静态同步方法同对象,同步代码块 对比 非静态同步方法不同对象,同步代码块 对比 非静态同步方法获取类锁和对象...

    20万字必备java面试八股文宝典-多线程.数据库.Spring.SpringBoot.Linux.分布式.设计模式.面试指导

    而在多线程编程方面,宝典系统地介绍了Java中线程的创建、同步、锁机制等重要知识点,帮助读者理解并掌握多线程编程的技巧。 针对数据库相关知识进行了详细的介绍,包括SQL语法、常用数据库管理系统(如MySQL、...

    Python实用教程:Python基础,Python高级特性,面向对象编程,多线程,数据库,数据科学,Flask,爬虫开发教程

    无论您是数据分析师、网络开发者还是对Python爬虫感兴趣的爱好者,这些资源都将为您的学习和实践提供有力的支持。 四、使用建议 按需选择工具与教程:根据实际需求选择合适的工具和教程,确保学习与实践的有效性。...

    java8集合源码分析-JUC:高并发与多线程

    高并发与多线程 Stargazers over time 线程 线程的创建和启动 线程的sleep、yield、join 线程的状态 代码在 部分。 synchronized关键字(悲观锁) synchronized(Object) 不能用String常量、Integer、Long。 锁住的是...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    5到10年.NET高级面试资料总结,面试必考!!!

    5.多线程并发编程 6.线程池 7.Socket通信 8.GC垃圾回收 9.泛型 10.反射 11.死锁 12.内存泄漏 13.数据结构 二、设计方面: 1.面向对象基础 2.设计模式 3.EF 4.MVC 5.MVVM 6.IOC 三、架构框架: 1.框架 2.分布式 3....

    涵盖了90%以上的面试题

    hashmap的底层原理 hashmap产生死锁的原因 hashmap的容量为什么...MySQL 中的行级锁、表级锁和页级锁 java中的死锁 公平锁和非公平锁 锁的总结 锁的优化 .......... 还有好多,不想写了,太多了,都是题主呕心沥血总结的

    java7hashmap源码-ThreadLearning:多线程的学习

    每个Java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级)之后,该对象头的Mark Word中就被设置指向Monitor对象的指针 Monitor是JVM实现的对象,当使用synchronized(obj)对一个对象进行...

    Java后端面试问题整理.docx

    • 熟悉Java多线程并发中线程基本方法,线程池,线程生命周期,熟悉Java锁中常见锁分类(乐观/悲观锁、自旋锁、独/共享锁、可重入锁、公平/非公平锁、分段锁、偏向锁,轻/重量级锁)和基本的锁升级策略

    JAVA2核心技术(中文的PDF).part3.rar

    本书是Java 2技术权威指南,全面覆盖Java 2技术的高级主题,包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时...

    Python高级用法(GIL锁,深拷贝,浅拷贝,私有属性,魔法属性,上下文管理器)

    目录GIL锁GIL定义:GIL介绍GIL与LockGIL与多线程Python 直接赋值、浅拷贝、深拷贝私有属性魔法方法属性访问控制描述符对像构造自定义容器上下文管理对象的序列化运算符相关的魔术方法比较运算符一元运算符和函数算术...

    简单介绍SQL Server里的闩锁

    闩锁是SQL Server存储引擎使用轻量级同步对象,用来保护多线程访问内存内结构。文章的第1部分我会介绍SQL Server里为什么需要闩锁,在第2部分我会给你介绍各个闩锁类型,还有你如何能对它们进行故障排除。 为什么...

    Java八股文的面试题

    多线程和并发: Java支持多线程编程,允许同时执行多个任务。Java中的并发编程机制包括线程、同步、锁等,以及java.util.concurrent包提供的高级并发功能。 异常处理: Java通过异常处理机制提供了一种结构化的错误...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    UNIX 高级教程系统技术内幕

    3.6 Solaris 和 SVR4 的多线程处理 3.6.1 内核线程 3.6.2 轻量级进程的实现 3.6.3 用户线程 3.6.4 用户线程的实现 3.6.5 中断处理 3.6.6 系统调用处理 3.7 Mach 中的线程 3.7.1 Mach 的抽象概念——任务和线程 3.7.2...

Global site tag (gtag.js) - Google Analytics