`

多线程学习笔记四

    博客分类:
  • java
阅读更多

/**
* 线程范围内的数据共享
*
* 应用场景:减少库存量,增加流水账和修改总账 ,这几个操作要在同一个事务中, 事务需要放在线程范围内
*
*
* @time 上午10:10:13
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class ThreadLocalTest {


/**
* @param args
*/
public static void main(String[] args) {
final A a = new A();
final B b = new B();
for (int i = 0; i < 5; i++) {
new Thread() {


@Override
public void run() {
// MyThreadLocalData.set(new Random().nextInt(10000));
// System.out.println(Thread.currentThread() + ":has put " +
// MyThreadLocalData.get());


// a.say();
// b.sayHello();


MyThreadLocalData.getMyThreadLocalInstance().setNum(new Random().nextInt(10000));
System.out.println(Thread.currentThread() + ":has put " + MyThreadLocalData.getMyThreadLocalInstance().getNum());


a.say();
b.sayHello();
MyThreadLocalData.clear();


}


}.start();
}
}
}


/**
* 存放全局变量
*
* @time 上午10:27:49
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
class MyThreadLocalData {
/*
* private static ThreadLocal tl = new ThreadLocal();
*
* public static Object get() { return tl.get(); }
*
* public static void set(Object value) { tl.set(value); }
*/
private static ThreadLocal instanceContainer = new ThreadLocal();


/**
* 构造器
*/
private MyThreadLocalData() {
}


/**
* 单例
*
* @return
*/
public static MyThreadLocalData getMyThreadLocalInstance() {
MyThreadLocalData instance = (MyThreadLocalData) instanceContainer.get();
if (null == instance) {
instance = new MyThreadLocalData();
instanceContainer.set(instance);
}


return instance;
}


/**
* 清除
*/
public static void clear() {
instanceContainer.remove();
}


private Integer x;


public void setNum(Integer x) {
this.x = x;
}


public Integer getNum() {
return x;
}


}


class A {
public void say() {
// System.out.println(Thread.currentThread() + ":A has geted " +
// MyThreadLocalData.get());


System.out.println(Thread.currentThread() + ":A has geted " + MyThreadLocalData.getMyThreadLocalInstance().getNum());


}
}


class B {
public void sayHello() {
// System.out.println(Thread.currentThread() + ":B has geted " +
// MyThreadLocalData.get());


System.out.println(Thread.currentThread() + ":B has geted " + MyThreadLocalData.getMyThreadLocalInstance().getNum());
}
}

分享到:
评论

相关推荐

    多线程学习笔记

    多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...

    JAVA 多线程学习笔记

    这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...

    java学习笔记2(多线程)

    java学习笔记2(多线程)java学习笔记2(多线程)

    多线程 学习笔记.md

    多线程 学习笔记.md

    java基础:多线程学习笔记

    java基础:多线程学习笔记

    UNIX多线程学习笔记

    【UNIX多线程学习笔记】 在UNIX操作系统中,多线程是一种重要的编程模型,它允许多个执行流在单个进程中并发运行。多线程带来了许多优势,包括提高应用程序响应速度,充分利用多CPU系统的资源,以及优化程序结构,...

    Java多线程学习笔记

    ### Java多线程学习笔记 #### 一、线程的基本概念 在计算机科学中,**线程**(Thread)是程序执行流的最小单位。一个标准的程序只能做一件事情,而通过多线程技术,可以让程序同时处理多个任务。在Java中,线程是...

    多线程学习笔记与学习

    本篇笔记将深入探讨多线程的各个方面,包括其定义、作用以及如何在Windows环境中进行多线程编程。 首先,进程和线程是操作系统中的基本执行单位。进程是程序的实例,拥有独立的虚拟内存空间和系统资源,当进程结束...

    java线程学习笔记

    Java 线程学习笔记 Java 线程创建有两种方法: 1. 继承 Thread 类,重写 run 方法:通过继承 Thread 类并重写 run 方法来创建线程,这种方法可以使线程具有自己的执行逻辑。 2. 实现 Runnable 接口:通过实现 ...

    C++多线程学习笔记1

    这份"C++多线程学习笔记1"涵盖了基础到进阶的多线程概念,旨在帮助初学者快速掌握这一关键技能。 首先,C++11引入了对多线程的支持,引入了`&lt;thread&gt;`库,使得创建和管理线程变得简单。创建一个新的线程可以使用`...

    java多线程学习笔记

    这篇文档和对应的源代码 博文链接:https://interper56-sohu-com.iteye.com/blog/172303

    Python3的多线程学习笔记[定义].pdf

    本篇学习笔记主要涵盖了线程基础、threading模块的使用以及线程同步控制。 首先,线程是操作系统分配CPU执行时间的基本单位,一个进程可以包含多个线程。在Python3中,线程的状态主要包括新建、就绪、运行、死亡、...

    马士兵多线程笔记.zip

    以下是对马士兵多线程笔记的详细解析。 1. **多线程基础**:多线程是指一个应用程序中同时执行多个线程(即任务)的能力。这种并发执行可以提高系统资源的利用率,提升程序的响应速度和执行效率,特别是在多核...

    java多线程笔记

    在多线程环境下,多个线程可以并行地在单个进程中执行,使得程序能够同时处理多项任务。 Java中的线程是通过`Thread`类或实现`Runnable`接口来创建的。你可以直接继承`Thread`类并重写`run()`方法,或者创建一个...

    Java并发编程学习笔记 pdf 多线程编程

    Java并发编程学习笔记,研究JAVA并发多线程编程的一本教程,使用并发技术可以开发出并行算法,充分利用多处理器的计算能力,避免硬件资源浪费。目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java...

    多线程学习笔记.docx

    在多线程编程中,进程和线程是两个核心概念。进程是操作系统资源分配的基本单位,每个独立执行的程序都对应一个进程。而线程则是程序执行的最小单元,是进程内部的一条执行路径。多线程是指在一个应用程序中存在多个...

    多线程学习笔记,关于创建线程,删除线程等相关指令的应用。

    在计算机科学中,多线程是一种编程模型,允许一个应用程序同时执行多个任务。这提高了系统的效率,特别是对于处理大量并发操作的情况。以下是一些关于多线程的重要知识点,特别是关于在Linux和Windows环境下创建和...

Global site tag (gtag.js) - Google Analytics