`
m635674608
  • 浏览: 4934482 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java threadLocal 测试

    博客分类:
  • java
 
阅读更多
package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadLocalTest {

	public ThreadLocalTest()

	{

	}

	public static void main(String[] args) throws Exception {
		new ThreadLocalTest().test3();
	}

	private static final ThreadLocal<Content> tl = new ThreadLocal<Content>();

	private ExecutorService executorService = Executors.newFixedThreadPool(2);

	public void set() {
		Content content = new Content();
		System.out.println("set hashCode=" + content.hashCode());
		tl.set(content);
	}

	void test3() throws Exception

	{

		System.out.println("begin");
		executorService.execute(new Runnable() {
			@Override
			public void run() {
				set();
				
			}
		});
		// 线程销不会回收,线程没结束
		Thread.sleep(2000);
		System.out.println("request gc");
		System.gc();
		Thread.sleep(1000);
		
		executorService.shutdown();
		// 线程销会回收
		Thread.sleep(2000);
		System.out.println("request gc");
		System.gc();
		Thread.sleep(1000);
		

		System.out.println("end");

	}

	void test2() throws Exception

	{

		System.out.println("begin");
		new Thread() {
			public void run() {
				set();
				// 线程销毁会回收,線程執行借宿
			}
		}.start();

		Thread.sleep(2000);
		System.out.println("request gc");
		System.gc();
		Thread.sleep(1000);

		System.out.println("end");

	}

	void test1() throws Exception

	{

		System.out.println("begin");

		set();
		System.out.println("try to release content data");

		tl.set(null);// @1
		// tl.remove();//@2

		// 会回收
		System.out.println("request gc");
		System.gc();
		Thread.sleep(1000);

		System.out.println("end");

	}

}

class Content

{

	// /byte data[] = new byte[1024 * 1024 * 10];

	protected void finalize()

	{
		System.out.println("I am released" + hashCode());

	}

	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return super.hashCode();
	}

}

 

分享到:
评论

相关推荐

    java线程安图分析(含测试代码)

    目录: 基础概念 造成线程不安全的条件 变量种类与线程安全 如何避免线程不安全 synchronized关键字使用和原理 jdk多线程并发包 THREADLOCAL 测试工程

    java面试题及技巧4

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题目与技巧1

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题以及技巧

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    Java并发编程实战

    3.3.3 ThreadLocal类 3.4 不变性 3.4.1 Final域 3.4.2 示例:使用Volatile类型来发布不可变对象 3.5 安全发布 3.5.1 不正确的发布:正确的对象被破坏 3.5.2 不可变对象与初始化安全性 3.5.3 安全发布的常用...

    蓝桥杯leetcode-JavaBase:Java一些类测试用例

    仓库内容是学习Java时所用的一些测试demo: 1. Cloneable 深克隆和浅克隆 2. Compare 实现Compare和Comparator的区别 3. Hash Hash值比较、HashSet特点、Final特点 4. Iterator 迭代器的用法 5. KeyWord volatiled和...

    java随机数

    另一个值得考虑的是多线程java.lang.ThreadLocal的实例。偷懒的做法是通过Java本身API实现单一实例,当然你也可以确保每一个线程都有自己的一个实例对象。 虽然Java没有提供一个很好的方法来管理java.util.Random的...

    java面试题及技巧3

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题以及技巧6

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    实战Java高并发程序设计(第2版)PPT模板.pptx

    4锁的优化及注意事项 4.1有助于提高锁性能的几点建议 4.2java虚拟机对锁优化所做的努力 4.3人手一支笔:threadlocal 4.4无锁 4.5有关死锁的问题 4.2Java虚拟机对锁优化所做的努力 4.3人手一支笔:ThreadLocal 4.4...

    Java 并发编程实战

    3.3.3 ThreadLocal类 3.4 不变性 3.4.1 Final域 3.4.2 示例:使用Volatile类型来发布不可变对象 3.5 安全发布 3.5.1 不正确的发布:正确的对象被破坏 3.5.2 不可变对象与初始化安全性 3.5.3 安全发布的常用...

    SeleniumAutomationFramework:此存储库包含Java中Selenium Framework的代码

    ThreadLocal-&gt;线程安全 范围报告5.0.5 用于测试数据维护的Excel工作表(数据提供者) 属性或Json作为配置文件 使用TestNg侦听器,例如注释转换器,ItestListener,IsuiteListener 在云或dockerizedSelenium网格...

    Java并发编程(学习笔记).xmind

    ThreadLocal类 只读共享:不变对象一定是线程安全的 尽量将域声明为final类型,除非它们必须是可变的 分类 不可变对象 事实不可变对象 线程安全共享 封装有助于管理复杂度 线程...

    service_classloader

    工程名为service_classloader,功能全部使用corejava实现,使用maven管理依赖,没有使用任何框架(junit除外)。 使用的技术主要包括:classlaoder,加密解密,线程,ThreadLocal使用,反射,IO操作,jdbc, 序列化,...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Java学习笔记-个人整理的

    {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {...

    oai-harvester2

    oai-harvester2 oai-harvester2 开源软件 (OSS) 项目是一个提供 OAI-PMH ... 重写所有测试以使用新的 junit 并修复测试 URL。 Maven 存储库 这个包没有公共 Maven 存储库。 您必须构建并将其部署到您的 Maven 存储库。

Global site tag (gtag.js) - Google Analytics