下面直接运行即可.

package com.controller;/*** Created by** @author :   zj* @date :   2018-08-20*/public class Test implements Runnable {public synchronized void run() {for (int i = 0; i < 10; i++) {System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);}}public static void main(String[] args) throws InterruptedException {Test test = new Test(); // 创建对象// 1.同一个对象的两个线程, 在run()存在互斥锁, 因为一个对象只有一把锁, 一个线程在用, 其他的线程必须等待, 但是可以访问非synchronized方法Thread ta = new Thread(test, "A1");Thread tb = new Thread(test, "A2");ta.start();tb.start();Thread.sleep(500);System.out.println("----------");// 2.不同对象, 访问synchronized方法是不存在互斥的, 因为没个对象有各自的锁Test test1_a = new Test();Test test1_b = new Test();Thread tt1 = new Thread(test1_a, "A");Thread tt2 = new Thread(test1_b, "B");tt1.start();tt2.start();Thread.sleep(500);System.out.println("----------");// 3.类synchronized测试, 类线程锁和对象线程锁 互不影响final InsertData insertData = new InsertData();new Thread() {@Overridepublic void run() {insertData.insert("A");}}.start();new Thread() {@Overridepublic void run() {insertData.insert1("B");}}.start();}}class InsertData {public synchronized void insert(String name) {System.out.println(name+"执行对象线程锁.. BEGIN");try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(name+"执行对象线程锁.. END");}public synchronized static void insert1(String name) {System.out.println(name + "执行类线程锁 .. BEGIN");System.out.println(name + "执行类线程锁 .. END");}
}

结果如下:

A1 synchronized loop 0
A1 synchronized loop 1
A1 synchronized loop 2
A1 synchronized loop 3
A1 synchronized loop 4
A1 synchronized loop 5
A1 synchronized loop 6
A1 synchronized loop 7
A1 synchronized loop 8
A1 synchronized loop 9
A2 synchronized loop 0
A2 synchronized loop 1
A2 synchronized loop 2
A2 synchronized loop 3
A2 synchronized loop 4
A2 synchronized loop 5
A2 synchronized loop 6
A2 synchronized loop 7
A2 synchronized loop 8
A2 synchronized loop 9
----------
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
A synchronized loop 5
A synchronized loop 6
A synchronized loop 7
A synchronized loop 8
B synchronized loop 0
A synchronized loop 9
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4
B synchronized loop 5
B synchronized loop 6
B synchronized loop 7
B synchronized loop 8
B synchronized loop 9
----------
A执行对象线程锁.. BEGIN
B执行类线程锁 .. BEGIN
B执行类线程锁 .. END
A执行对象线程锁.. END

synchronized(互斥线程,类线程和对象线程),一段代码理解相关推荐

  1. java runnable main_Java 线程类问题写一个线程类MyThread,该线程实现了Runnable接口,写一个main方法, * 用for循...

    共回答了24个问题采纳率:91.7% interrupt(), stop(), suspend() 都不推荐再用,而是应该让 run 方法正常地退出,如果你打算让它循环,就在 run() 方法内用一个 ...

  2. 通过获取客户端Json数据字符串,反序列化为实体对象的一段代码

    #region 保存候选人数据/// <summary>/// 保存候选人数据/// </summary>/// <param name="entity&quo ...

  3. 认识Delphi的线程类

    本文是没有写过delphi的多线程,对delphi6的线程类TThread不熟悉的人而写的,主要从 TThread的源代码入手.(其他版本的delphi,请参照此文自行理解) Delphi为多线程的实 ...

  4. 多线程、并发/并行、自定义线程类、线程安全、守护线程、定时器、线程状态、线程池

    目录 进程和线程: 进程: 线程: 多线程的好处: 线程调度: 分时调度: 抢占式调度: 并发与并行: 线程的生命周期: 实现线程的两种基本方式(还有第三种): 创建Thread线程类: 创建Runn ...

  5. Delphi中的线程类

    Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...

  6. 【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )

    文章目录 I . JNI 线程创建 II . 线程执行函数 III . 线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ...

  7. Qt多线程编程的主要线程类

    1.描述 Qt提供QThread类处理多线程,继承自QObject.不受平台影响,实现跨平台功能. 2.主要的线程类 QAtomicInt:提供Interger与平台无关的Atomic运算,即提供了整 ...

  8. Delphi线程类的使用(1)

    Delphi线程类的使用 猛禽[Mental Studio](个人专栏)(BLOG) http://mental.mentsu.com 去年底我写过一篇文章<Delphi中的线程类.2.3.4. ...

  9. Delphi中的线程类Thread

    原文:http://www.heibai.net/article/info/info.php?infoid=22594 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数De ...

最新文章

  1. 系统备份是对计算机硬件进行维户吗,计算机系统维护毕业论文_精品.doc
  2. Ubuntu 防火墙 ufw
  3. 升级遗留代码的最佳实践
  4. 【转】left join 和 left outer join 的区别
  5. 基坑监测日报模板_深基坑又出事,广西工地 10m深 基坑坍塌,4名钢筋工被埋,3人遇难!...
  6. Spring MVC URL的映射问题 ;Spring MVC 跳转与iframe包含地址问题
  7. 《图解算法》学习笔记之快速排序
  8. CAD2020学习教程
  9. MPLS 配置静态LSP
  10. Docker镜像加速
  11. 写给大佬看的STP算法详细配置实验过程
  12. k8s多master集群拓扑
  13. 随机运算HTML5代码,js随机数学加法计算答题代码
  14. flink设置登录密码
  15. 观察者模式与推拉模型
  16. 沟通的艺术:看人入里,看出人外 - part 3
  17. Python实现excel表合入
  18. 【YBT2023寒假Day3 C】樱桃莓莓(凸包)(线段树)
  19. 手机党心声:“离开手机生活”这是不可能的!
  20. [汉化主题] Knowhow v1.1.16 – 响应式论坛知识库WordPress主题

热门文章

  1. 西部数据助手mysql,西部数据6TBMy Book开箱及替换硬盘
  2. 美国国家安全局(NSA)“酸狐狸”漏洞攻击武器平台
  3. linux ntfs 写文件,Linux下写NTFS文件系统
  4. Excel日期转换为大写中文数字
  5. oppo通知栏的那些事儿(如何分析系统级应用)
  6. MySQL建立图书借阅库练习记录
  7. 原来不一样的2007是这样的不一样!
  8. 第十六届全国大学生智能车竞赛裁判员手册
  9. 【读懂Autosar代码】-4-VAR变量的定义
  10. 广州品茗:此间普洱香四溢