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. mysql压力测试工具Mysqlslap

    mysql 性能测试工具:The MySQL Benchmark Suite(不支持多CPU而且不是压力工具) 压力测试工具: MySQL super-smack:需要找能连接外网的机器,能连接外网的 ...

  2. MathType中常遇到的几个问题

    每次打开别人的论文,发现公式文字都排版得非常整齐,公式也编辑得非常漂亮,看起来就非常得赏心悦目.再打开自己的论文,一片凌乱,自己不想都再看,公式编辑得乱七八糟,符号不够规范,大小不够统一,你自己都觉得 ...

  3. python--条件判断和循环--3

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 一.if语句 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄, ...

  4. oracle函数学习_根据用户id获取用户角色

    create or replace function FN_GET_ROLES(v_user_id varchar2) return varchar2 istype zy_emp_cursor is ...

  5. [深入理解Android卷一全文-第四章]深入理解zygote

    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的所有内容. ...

  6. Java精选笔记_JSTL(JSP标准标签库)

    JSTL(JSP标准标签库) JSTL入门 JavaServer Pages Standard Tag Library:JSP标准标签库 在JSP中可以通过Java代码来获取信息,但是过多的Java代 ...

  7. Java精选笔记_Servlet事件监听器

    Servlet事件监听器 概述 在程序开发中,经常需要对某些事件进行监听,如监听鼠标点击事件.监听键盘按下事件等,此时就需要使用事件监听器. 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会 ...

  8. python2.0_day19_后台数据库设计思路

    from django.db import models # Create your models here. from django.contrib.auth.models import User ...

  9. ionic模版引擎及循环

    首先来个官方文档:http://ionicframework.com/docs/api/directive/ionList/ 1)ionic模型引擎的定界符是双大括号 {{}} 2)要使用什么模版变量 ...

  10. 淘宝cnpm(可替代nodejs默认npm)

    淘宝 NPM 镜像 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步. https://npm.taobao.org/