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. 改善C#程序的建议4:C#中标准Dispose模式的实现

    http://www.cnblogs.com/luminji/archive/2011/03/29/1997812.html 需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个 ...

  2. sqlite数据库下载安装和初步操作和所遇到的问题near &quot;sqlite3&quot;:syntax error

    1.下载sqlite数据库:http://www.sqlite.org/download.html 假设是在window上安装须要在 Windows 区下载预编译的二进制文件.如图下载下载 sqlit ...

  3. iOS调用系统相册、相机 显示中文标题

    解决手机语言已经设置显示中文 在调用系统相册.相机界面 时显示英文问题, 在 info.plist里面添加Localized resources can be mixed          YES 表 ...

  4. MYSQL IFNULL函数的使用

    IFNULL函数是MYSQL数据库中最重要的函数之一,下面就对该函数的使用方面进行分析,希望对您能够有所帮助. 下文对MYSQL IFNULL函数的使用进行了详细的叙述,供您参考学习,如果您在MYSQ ...

  5. C语言简介(转自菜鸟教程)

    C 简介 C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的.C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现. 在 1978 ...

  6. 使用WdatePicker获取比当前时间大的写法

    <input name="today.date" class="Wdate" type="text" onClick="Wd ...

  7. Cognos入门教程

    Cognos入门教程 1. ReportStudio入门教程 ReportStudio入门教程(http://blog.csdn.net/column/details/ygy-reportstudio ...

  8. java基础---->Base64算法的使用

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...

  9. MQTT的学习研究(十七)Mosquitto简要教程(安装&使用)

    Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案.本文的主旨在于记录M ...

  10. MyBatis官方文档——XML 映射配置文件

    XML 映射配置文件 MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 ...