Java多线程中的ThreadLocal,可继承,可修改

Java多线程中的ThreadLocal,可继承,可修改。

package test;

import java.util.Date;

public class InheritableThreadLocalExt  extends InheritableThreadLocal<Object>{
	@Override

	protected Object initialValue() {
		return new Date().getTime();
	}

	@Override
	protected Object childValue(Object parentValue) {
		return parentValue + " insert at child thread.";
	}

}
package test;

public class Tools  {
	public static InheritableThreadLocalExt tl = new InheritableThreadLocalExt();

}
package test;

public class ThreadA extends Thread {

	@Override
	public void run() {
		try {
			for (int i = 0; i < 10; i++) {
				System.out.println("from ThreadA get value=" + Tools.tl.get());
				Thread.sleep(100);
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}
package test;

public class Run {

	public static void main(String[] args) {
		try {
			for (int i = 0; i < 10; i++) {
				System.out.println("from Main get value=" + Tools.tl.get());
				Thread.sleep(100);
			}
			Thread.sleep(5000L);
			ThreadA a = new ThreadA();
			a.start();

		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

输出:

from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
时间: 2024-11-10 01:31:05

Java多线程中的ThreadLocal,可继承,可修改的相关文章

Java多线程原理及ThreadLocal多线程实例详解

一.线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是程序的一个动态执行过程,是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 Windows系统中,一个运行的exe就是一个进程.线程是指进程中的一个执行流程,一个进程中可以运行多个线程.比如java.exe进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存."同时"执行是人的感觉,在线程之间实际上轮换执行. 二.Java

多线程问题-新手求助关于Java多线程中启动线程问题

问题描述 新手求助关于Java多线程中启动线程问题 public class Example15_1 { /** * @param args */public static void main(String[] args) { // TODO Auto-generated method stub SpeakHello speakHello; SpeakNinhao speakNinhao; speakHello = new SpeakHello(); speakNinhao= new Speak

关于java多线程中的join方法

问题描述 关于java多线程中的join方法 1.主线程可能在子线程结束之前 结束吗?如果可能的话 举一个例子 2.如何理解join方法, 结合实际应用. 非常感谢非常感谢!!! 解决方案 关于join,参考:http://www.blogjava.net/jnbzwm/articles/330549.html 解决方案二: 主线程可能在子线程结束之前 结束吗 一般来说不可以,但是也不一定,如果子线程在执行finally中的代码,应该会等它执行完了才退出. 晕,join方法和什么"让主线程等子线

java多线程中两个容器之间的同步

问题描述 java多线程中两个容器之间的同步 写了一个多线程的爬虫(对多线程不熟悉),但是每次队列中都有重复的元素,我把代码逻辑贴上来,大家帮我看一下,谢谢了: 在进程中: queue = LinkedBlockingQueue set = ConcurrentSkipListSet 在每个进程中使用了bfs bfs: while(!queue.empty()){ s = queue.poll() //...逻辑代码 set.add(s) //对s所有子状态扩展 for(son : s.sons

java多线程中的volatile和synchronized用法分析_java

本文实例分析了java多线程中的volatile和synchronized用法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package com.chzhao; public class Volatiletest extends Thread {     private static int count = 0;     public void run() {         count++;     }     public static void main(String

理解java多线程中ExecutorService使用_java

java.util.concurrent包里提供了关于多线程操作的类,平常用的比较多的是ExecutorService及其实现类(如ThreadPoolExecutor等),Executor,Executors,Future,Callable等 1. ExecutorService(继承自Executor)接口:提供了一些异步的多线程操作方法,如execute(), submit(), shutdown(), shutdownNow()等 2. Executor接口:执行提交的任务(线程),只有

Java多线程中的两个问题

多线程|问题 多线程中Thread.stop()被废弃的原因:当调用Thread.stop()方法时,该线程将释放先前其控制的所有资源,而在线程没有正常执行完毕之前强迫Stop之后,这些资源可能处在一种不一致的状态,而这些处于不一致的状态的资源被其他的线程所使用之后,就可能会发生一些意想不到的错误.实现时间差事件的解决办法:在主线程中设置一个状态变量,在响应线程执行时,先sleep()一个固定的时间段,之后检查主线程的这个状态,如果这个状态不同就执行不同的操作,或停止执行.可以通过回调机制来实现

java多线程中使用同步那它和单线程有什么区别?

问题描述 如果在多线程中使用同步synchronized比如有100个线程,所有线程都要一个一个的执行,那这和单线程不是一样了吗?并且多线程同步的时候操作系统来回的检查锁的状态倒浪费了性能,我理解的是不是哪里不对啊,请知道的帮解答一下,还有就是关于同步有很多方法,是不是都一回事只要会一种就行啊比如我就知道在run里synchronized(obj)这样 解决方案 解决方案二:它们的目的是相同的,都可以很好控制程序执行流程:多线程是为了提高CPU的利用率,在某个线程高速缓存或者执行等待时,可以通知

深入探讨Java多线程中的volatile变量_java

volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性. 什么是线程的可见性: 锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility).互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据.可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 -- 如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前