关于《Java多线程编程核心技术》P113页的2.2.15内部类与同步:实验2
来源:互联网 发布:mac 泳道图 编辑:程序博客网 时间:2024/06/06 04:53
该实验结果在P115,图2-63 运行结果,该图可能存在一定的误导性,为了使实验结果更加清晰,请将InnerClass1中的method2方法中"j<10"改为"j<20".
类OutClass.java代码如下:
package org.goldwind.test;/** * 类说明 * * @author 葛楠 gnan1992@126.com * @date 2017年12月4日 新建 */public class OutClass {static class InnerClass1 {public void method1(InnerClass2 class2) {String threadName = Thread.currentThread().getName();synchronized (class2) {System.out.println(threadName + " 进入InnerClass1类中的method1方法");for (int i = 0; i < 10; i++) {System.out.println("i=" + i);try {Thread.sleep(100);} catch (Exception e) {// TODO: handle exception}}System.out.println(threadName + " 离开InnerClass1类中的method1方法");}}public synchronized void method2() {String threadName = Thread.currentThread().getName();System.out.println(threadName + " 进入InnerClass1类中的method2方法");for (int j = 0; j < 20; j++) {System.out.println("j=" + j);try {Thread.sleep(100);} catch (Exception e) {// TODO: handle exception}}System.out.println(threadName + " 离开InnerClass1类中的method2方法");}}static class InnerClass2 {public synchronized void method1() {String threadName = Thread.currentThread().getName();System.out.println(threadName + " 进入InnerClass2 类中的method1 方法");for (int k = 0; k < 10; k++) {System.out.println("k=" + k);try {Thread.sleep(100);} catch (Exception e) {// TODO: handle exception}}System.out.println(threadName + " 离开 InnerClass2 类中的method1方法");}}}
运行类Run.java代码如下:
package org.goldwind.test;import org.goldwind.test.OutClass.InnerClass1;import org.goldwind.test.OutClass.InnerClass2;/** * 类说明 * * @author 葛楠 gnan1992@126.com * @date 2017年12月5日 新建 */public class Run {public static void main(String[] args) {final InnerClass1 in1 = new InnerClass1();final InnerClass2 in2 = new InnerClass2();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubin1.method1(in2);}},"T1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubin1.method2();}}, "T2") ;Thread t3 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubin2.method1();}}, "T3");t1.start();t2.start();t3.start();}}
运行结果如下:
T1 进入InnerClass1类中的method1方法T2 进入InnerClass1类中的method2方法i=0j=0i=1j=1j=2i=2j=3i=3j=4i=4j=5i=5j=6i=6j=7i=7i=8j=8j=9i=9j=10T1 离开InnerClass1类中的method1方法T3 进入InnerClass2 类中的method1 方法k=0k=1j=11j=12k=2k=3j=13k=4j=14k=5j=15k=6j=16k=7j=17k=8j=18k=9j=19T2 离开InnerClass1类中的method2方法T3 离开 InnerClass2 类中的method1方法
说明:T1与T3同步,与T2异步。
阅读全文
0 0
- 关于《Java多线程编程核心技术》P113页的2.2.15内部类与同步:实验2
- java核心技术笔记 接口与内部类
- 【java核心技术笔记】接口与内部类
- java核心技术----内部类
- Java核心技术读书笔记--内部类
- 《Java核心技术》复习笔记 - 第六章 接口与内部类
- JAVA核心技术I之接口与内部类
- 接口与内部类(Java核心技术卷Ⅰ)
- 关于java 多线程编程的同步问题
- JAVA基础【6.4】《Java核心技术1》接口与内部类-内部类
- 内部类与异常类:实验2
- java多线程编程核心技术
- 《Java多线程编程核心技术》
- Java 多线程编程核心技术
- [Java多线程编程核心技术]
- 《java多线程编程核心技术》
- java多线程编程核心技术
- Java多线程编程核心技术
- ELK简介及架构分析
- 正则表达式 简单的表单验证
- Eclipse中link方式安装插件
- 【算法分析与设计】【第十四周】647. Palindromic Substrings
- jquery属性的相关js实现方法
- 关于《Java多线程编程核心技术》P113页的2.2.15内部类与同步:实验2
- unity 5.5 遇到个奇葩的粒子bug
- 安卓设计模式の观察者模式
- 问题解决:printf()函数无法打印
- 立即调用的函数表达式
- Java IO流
- JVM和DVM的区别
- BZOJ3206: [Apio2013]道路费用
- nltk_data 离线安装