1:测试ThreadLocal类,  为每个线程域保存局部变量。例如下面的例子。

ThreadLocal为每个线程保存了一个Test对象,  那么当执行线程时,每个线程中的test具有唯一性。某一个线程执行时,查询当前线程是否在ThreadLocalMap是否具有Test缓存对像,判断出该线程具有ThreadLocal保存的Test对象时,就不再创建Test对象,使用ThreadLocal为本线程保存的Test对象。如果没有就创建一个。

package chapter03;

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor; /**
* @program: GradleTestUseSubModule
* @author: Yafei Li
* @create: 2018-07-12 16:14
**/
public class ThreadLocalTest {
static ThreadLocal<Test> threadLocal=new ThreadLocal(){
public Test initialValue() {
return new Test();
}
}; public static void main(String[] args){ Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
Test test = threadLocal.get();
test.countplus();
System.out.println(Thread.currentThread()+" "+test.i);
if (test.i > 5) {
break;
}
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
Test test = threadLocal.get();
test.countplus();
System.out.println(Thread.currentThread()+" "+test.i);
if (test.i > 5) {
break;
}
}
}
}); thread.start();
thread2.start(); /**
* 结果
Thread[Thread-0,5,main] 1
Thread[Thread-1,5,main] 1
Thread[Thread-1,5,main] 2
Thread[Thread-1,5,main] 3
Thread[Thread-1,5,main] 4
Thread[Thread-1,5,main] 5
Thread[Thread-1,5,main] 6
Thread[Thread-0,5,main] 2
Thread[Thread-0,5,main] 3
Thread[Thread-0,5,main] 4
Thread[Thread-0,5,main] 5
Thread[Thread-0,5,main] 6
*/ }
}
class Test{
int i=0;
public void countplus() {
i++;
}
}

2:FutureTask表示线程一个将来的结果,方法会等到该线程得到结果为止。

例如:

package chapter05.class5;

import org.junit.Test;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask; /**
* @program: GradleTestUseSubModule
* @author: Yafei Li
* @create: 2018-07-13 17:24
**/
public class MyPreloader {
//FutureTask 异步结果,闭锁
private final FutureTask<ProductInfo> future = new FutureTask<ProductInfo>(new Callable<ProductInfo>() {
@Override
public ProductInfo call() throws Exception {
System.out.println("执行thread中的future");
System.out.println(System.currentTimeMillis());
Thread.sleep(10000);
ProductInfo productInfo=new ProductInfo("myname","mypassword");
return productInfo;
}
}); private final Thread thread = new Thread(future); //FutureTask实现了Runnable类。 public void start(){
thread.start();
} public ProductInfo get() {
try {
return future.get(); //会等待线程执行,直到返回结果。
}catch (Exception e){
e.printStackTrace();
}
return null;
} @Test
public void test() { thread.start(); //执行thread,得到FutureTask
ProductInfo productInfo=get(); //会等待线程执行,直到得到返回的结果
System.out.println("name:"+productInfo.getName()+" password:"+productInfo.getPassword());
System.out.println(System.currentTimeMillis());
}
}

ProductInfo类

package chapter05.class5;

public class ProductInfo {

    private String name;
private String password; public ProductInfo(String name, String password) {
this.name = name;
this.password = password;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}

结果:

执行thread中的future
153147614573
name:myname password:mypassword
153147614574

ThreadLocal类,实例测试,FutureTask类,实例测试。的更多相关文章

  1. java 多线程:Callable接口;FutureTask类实现对象【Thread、Runnable、Callable三种方式实现多线程的区别】

    Callable接口介绍: Java5开始,Java提供了Callable接口,像是Runnable接口的增强版,Callable接口提供了一个 call()方法可以作为线执行体. call()方法比 ...

  2. python基础——实例属性和类属性

    python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...

  3. python实例编写(6)--引入unittest测试框架,构造测试集批量测试(以微信统一管理平台为例)

    ---恢复内容开始--- 一.python单元测试实例介绍 unittest框架又叫PyUnit框架,是python的单元测试框架. 先介绍一个普通的单元测试(不用unittest框架)的实例: 首先 ...

  4. Nunit测试工具使用实例

    前言: 本文主要是介绍了Nunit的基本使用,其中参详了很多已有的文章,由于最近要使用其进行测试,所以对网上的文章做了下整理,同时加入了一些自己的实践. NUnit的属性 TestFixture 它标 ...

  5. Spring Boot中采用Mockito来mock所测试的类的依赖(避免加载spring bean,避免启动服务器)

    最近试用了一下Mockito,感觉真的挺方便的.举几个应用实例: 1,需要测试的service中注入的有一个dao,而我并不需要去测试这个dao的逻辑,只需要对service进行测试.这个时候怎么办呢 ...

  6. Python笔记(七):字典、类、属性、对象实例、继承

    (一)  简单说明 字典是Python的内置数据结构,将数据与键关联(例如:姓名:张三,姓名是键,张三就是数据).例如:下面这个就是一个字典 {'姓名': '张三', '出生日期': '2899-08 ...

  7. Python面向对象 -- 继承和多态、获取对象信息、实例属性和类属性

    继承和多态 继承的好处: 1,子类可以使用父类的全部功能 2,多态:当子类和父类都存在相同的方法时,子类的方法会覆盖父类的方法,即调用时会调用子类的方法.这就是继承的另一个好处:多态. 多态: 调用方 ...

  8. python 全栈开发,Day18(对象之间的交互,类命名空间与对象,实例的命名空间,类的组合用法)

    一.对象之间的交互 现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人.现在我们要再创建一个狗类,狗就不能打人了,只能咬人,所以我们给狗一个bite方法.有了狗类,我们还 ...

  9. 测试 Java 类的非公有成员变量和方法

    引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...

  10. 类命名空间与对象、实例的命名空间 and 面向对象的组合用法

    类命名空间与对象.实例的命名空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 动态属性就 ...

随机推荐

  1. BleedTree动画混合树

    通过Unity动画状态机,能帮我们轻松处理转换各个动画片断,达到想要的效果,但是如果仅仅是一个个动画的硬生生的切换,那么看起来就非常突然,而不真实了,在质量要求比较高的游戏中,特别是动作游戏,我们就不 ...

  2. 如何通过phoenix中查看表的主键信息

    需求描述: 今天一个开发的同事让帮忙查看下表的主键列,在此记录下. 操作过程: 1.通过!primarykeys命令查看表的主键 !primarykeys SYNC_BUSINESS_INFO_BYD ...

  3. swift - UIButton 的用法

    1,按钮的创建 (1)按钮有下面四种类型: contactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 detailDisclosure:前面带“!”图标按钮,默认文字颜色为蓝 ...

  4. raw_input()

    raw_input() 用于接收标准输入,并把标准输入当成字符串类型来处理,只能在 Python2 中使用,Python3 中没有这个函数 #!/usr/bin/env python #-*- cod ...

  5. 也谈谈Unity的transform使用

    一.Transform和transform 我们来详谈Unity的transform使用,这里所说的tansform不是类UnityEngine命名空间下的Transform,而是transform. ...

  6. ceph 存储安装部署

    环境准备 1.三台服务器 cephnode01 192.168.254.83 cephnode02 192.168.254.84 cephnode03 192.168.254.85 2.基本环境配置 ...

  7. hadoop 2.2.0集群安装详细步骤(简单配置,无HA)

    安装环境操作系统:CentOS 6.5 i586(32位)java环境:JDK 1.7.0.51hadoop版本:社区版本2.2.0,hadoop-2.2.0.tar.gz 安装准备设置集群的host ...

  8. Splay模板 1.0

    struct Splay{ int rt,sz; ///根节点,树节点总数 ],fa[N];///值,左右儿子,父亲 void spin(int t){ ///旋转操作 ]==t; son[x][y] ...

  9. 微信小游戏5.2.2 没有xml支持库的问题解决

    需要下载xml支持库,并在game.js添加 window.DOMParser = require("./xmldom/xmldom.js").DOMParser; 如下图:

  10. Video如何不自动全屏播放?

    知乎:微信内置浏览器 如何小窗不全屏播放视频? 目前在微信中只能全屏播放,只有加入腾讯白名单的视频才能小屏播放. 知乎上讨论的解决方案尚未测试,太麻烦了.