`
lobin
  • 浏览: 417407 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一段测试代码

 
阅读更多

 

package com.java;

import java.lang.reflect.Field;

import sun.misc.Unsafe;

class SynTestClass {
	protected Thread mainThread;
	
	public SynTestClass(Thread mainThread) {
		this.mainThread = mainThread;
	}
	
	public void t() {
		System.out.println(Thread.currentThread().getName() + ": t");
		synchronized(mainThread) {
			mainThread.notify();
			System.out.println("notified");
		}
		try {
			Thread.sleep(24 * 60 * 60 * 1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public synchronized void tt() {
		System.out.println(Thread.currentThread().getName() + ": tt");
		synchronized(mainThread) {
			mainThread.notify();
			System.out.println("notified");
		}
		try {
			Thread.sleep(24 * 60 * 60 * 1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}


class SynTestClass2 extends SynTestClass {
	
	public SynTestClass2(Thread mainThread) {
		super(mainThread);
	}
	
}

class ThreadTest1 extends Thread {
	private SynTestClass st;
	
	public ThreadTest1(SynTestClass st) {
		this.st = st;
	}
	
	public void run() {
		st.t();
	}
}

class ThreadTest11 extends Thread {
	private SynTestClass st;
	
	public ThreadTest11(SynTestClass st) {
		this.st = st;
	}
	
	public void run() {
		st.tt();
	}
}

class ThreadTest2 extends Thread {
	private SynTestClass2 st;
	
	public ThreadTest2(SynTestClass2 st) {
		this.st = st;
	}
	
	public void run() {
		st.t();
	}
}

class ThreadTest22 extends Thread {
	private SynTestClass2 st;
	
	public ThreadTest22(SynTestClass2 st) {
		this.st = st;
	}
	
	public void run() {
		st.tt();
	}
}

public class SynchronizedTest {

	public static Unsafe getUnsafe() throws Throwable {
		Class<?> unsafeClass = Unsafe.class;
		for (Field f : unsafeClass.getDeclaredFields()) {
			if ("theUnsafe".equals(f.getName())) {
				f.setAccessible(true);
				return (Unsafe) f.get(null);
			}
		}
		throw new IllegalAccessException("no declared field: theUnsafe");
	}
	
	public static void main(String[] args) {
		Thread mainThread = Thread.currentThread();
		
		SynTestClass2 st2 = new SynTestClass2(mainThread);
		
		Thread t = new ThreadTest2(st2);
//		Thread t = new ThreadTest22(st2);
		t.start();
		
		try {
			synchronized(mainThread) {
				mainThread.wait();
			}
		} catch (InterruptedException e) {
			System.out.println("Ok: it's expected, main thread continue to run...");
		}
		
		Unsafe unsafe = null;
		try {
			unsafe = SynchronizedTest.getUnsafe();
		} catch (Throwable e) {
			e.printStackTrace();
		}
		boolean ok = unsafe.tryMonitorEnter(st2);
		if (ok) {
			st2.t();
//			st2.tt();
			unsafe.monitorExit(st2);
		} else {
			System.out.println(Thread.currentThread().getName() + ": fail to enter monitor");
		}
	}
}

 

分享到:
评论

相关推荐

    test.php一段测试代码

    php开发环境搭建,用来测试mysql的一小段代码。

    Canvasgame一段代码

    在这个"Canvasgame一段代码"的问题中,我们可能面临的是一个关于Canvas游戏编程的特定问题,可能涉及到动画渲染、碰撞检测、用户交互等技术。 首先,Canvas API提供了大量的绘图方法,如`fillRect()`用于填充矩形,...

    网速测试的一段代码

    标题中的“网速测试的一段代码”指的是一个用于测量网络速度的编程代码示例。在IT行业中,了解如何编写或使用这样的代码可以帮助我们评估网络连接的性能,这对于网络管理员、开发者或者普通用户来说都十分有用。它...

    js代码-这是一段测试代码

    在“js代码-这是一段测试代码”这个标题中,我们可以推测这是一个与JavaScript相关的代码测试案例。 JavaScript的核心概念包括变量、数据类型、控制结构、函数、对象和类。在描述中并未提供具体的代码内容,但我们...

    FPGA花式流水灯,分别用一段式代码和三段式代码书写,含TB文件

    描述中提到的一段式代码和三段式代码,是两种不同的状态机编码方式。在FPGA设计中,状态机通常用于管理系统的状态转换,根据输入信号和当前状态决定系统执行的下一步操作。状态机的编码方式有很多种,常见的有摩尔型...

    一段防采集的ASP代码

    - 当检测到`&lt;/P&gt;`或` `标签时,代码会在这些标签之前插入一个包含随机字符的`&lt;span style='DISPLAY:none'&gt;...&lt;/span&gt;`标签。 - 随机字符由ASCII码范围内的字符组成,并排除了可能干扰HTML解析的特定字符(如 `和 ...

    代码相似度检测测试数据

    在提供的"代码相似度检测测试数据"中,很可能包含了一系列Java源代码文件,用于测试和验证代码相似度检测工具的准确性和效率。这些测试数据可能包含了各种类型的相似代码,例如完全相同的代码块、仅做微小修改的代码...

    dyuRobot_OLED测试代码_oled调试问题_oled_OLED坏点_硬件调试_查oled屏幕代码_源码

    为了检测OLED屏幕的坏点,开发者通常会编写一段测试代码,遍历屏幕的每一个像素并点亮,然后检查每个位置是否正常显示。在`USER`文件夹中,可能存在一个名为`check_bad_pixels()`的函数,它会逐行逐列地设置OLED屏幕...

    PL/0语言编译器源代码及测试代码

    PL/0语言编译器的源代码及测试代码是学习编译器设计与实现的重要资源,尤其是对于那些想要深入理解编译过程和C/C++编程的人来说。 编译器是计算机科学中的关键组件,负责将高级语言(如Pascal或C++)编写的源代码...

    实现文件内容替换的一段C语言源代码

    这段C语言源代码提供了一种实现这一功能的方法,它允许用户指定要查找和替换的文本内容,并且已经在不同的平台上进行了编译和测试,包括老版本的Visual C++ 6.0和HP-UNIX操作系统。 在C语言中,进行文件内容替换...

    Hermite曲线代码-曲线平滑代码-Hermite曲线算法描述-曲线平滑python代码

    主要的Hermite功能代码封装成函数,可以很方便地调用,另外还编写一段测试代码,方便初学者充分理解如何去使用这个函数。一共编写了三个hermite平滑函数,第一个是两点hermite平滑,根据两点坐标以及两点的切线向量...

    hermite曲线计算代码-曲线平滑C语言代码-曲线拟合代码-三次Hermite曲线

    主要的Hermite功能代码封装成函数,可以很方便地调用,另外还编写一段测试代码,方便初学者充分理解如何去使用这个函数。一共编写了三个hermite平滑函数,第一个是两点hermite平滑,根据两点坐标以及两点的切线向量...

    34丨 实战一(上):通过一段ID生成器代码,学习如何发现代码质量问题1

    在本节实战课程中,我们将通过分析一个ID生成器的代码来探讨如何发现代码质量问题。首先,ID生成器的主要目标是在请求处理过程中生成一个唯一标识,以便于在日志中跟踪和定位问题。这个ID由三部分组成:本机名的最后...

    白盒测试源代码

    通过对控制流图的分析,可以确定哪些代码段需要被测试,以及如何设计测试用例来覆盖所有可能的控制流路径。 5. **单元测试**:白盒测试通常与单元测试结合,针对软件的最小可测试单元,如函数、方法或类进行测试。...

    系统测试代码

    3. 遵循TDD(Test-Driven Development)或BDD(Behavior-Driven Development)原则:先编写测试,再编写实现代码,这样可以确保代码一开始就满足测试要求。 4. 记录和跟踪缺陷:使用缺陷管理工具如JIRA或Bugzilla...

    测试代码 C语言的测试代码

    在开发过程中,测试代码是不可或缺的一环,因为它确保了程序的正确性和可靠性。 测试代码的主要目的是验证程序的功能是否按照预期工作,并找出可能存在的错误或缺陷。C语言中的测试通常包括单元测试、集成测试和...

    序列检测器的vhdl代码

    在这段代码中,我们定义了一个内部状态变量`s`,用于存储最近四个输入数据。`process`语句是一个敏感信号列表过程,根据`cp`、`en`、`data`和`s`的变化而触发。主要逻辑如下: - 当`en`为高电平时,检测器被激活。 -...

    .net的代码段资源

    在".NET的代码段资源"中,"BellwareNUnit.snippet"可能是由Bellware(可能是一位或一组开发者)创建的,专门为NUnit测试设计的一组代码片段。这些片段可能包括: 1. `SetUp` 和 `TearDown` 方法:每个测试前后的...

    Stream测试文件的全部代码

    6. **断言**:断言是一种在开发阶段检测代码逻辑错误的有效工具。通过在关键点插入断言,当条件不满足时,程序会立即停止,帮助开发者快速定位问题。 7. **覆盖率测试**:为了确保代码的全面性,可以使用覆盖率工具...

    代码检测工具,用于代码评审是检测代码行数等。

    本文将详细讨论标题和描述中提到的“代码检测工具”,特别是其在检测代码行数和识别代码缺陷方面的应用。 代码检测工具,如标题所言,主要用途之一是计算代码行数。这对于项目管理和成本估算至关重要。通过统计代码...

Global site tag (gtag.js) - Google Analytics