作业

作业

package threadlocal;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadLocalHomework {
//创建线程池
public static ExecutorService threadPool= Executors.newFixedThreadPool(20);

//创建线程要执行的方法
public String data(int num){
//清除之前线程访问的数据
ThreadSafeStringBuilder.stringBuilderThreadLocal.remove();
//获取每个线程要获取的对象
StringBuilder stringBuilder=ThreadSafeStringBuilder.stringBuilderThreadLocal.get();
//清除之前的数据
stringBuilder.delete(0,stringBuilder.length());
//添加数据
return stringBuilder.append("数字"+num).toString();
}
//测试
public static void main(String[] args) {
//20个请求
for(int i=0;i<20;i++){
int count=i;
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//执行添加数据方法
String result= new ThreadLocalHomework().data(count);
System.out.println(result);
}
});
}
//关闭线程
threadPool.shutdown();
System.out.println("是否关闭:"+threadPool.isShutdown());
}

}


//生成创建threadlocal类
class ThreadSafeStringBuilder{
public static ThreadLocal<StringBuilder> stringBuilderThreadLocal
=new ThreadLocal<StringBuilder>(){
@Override
protected StringBuilder initialValue() {
return new StringBuilder();
}
};
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小脸 2021-06-19 19:00:06

同学你好,

1、上述贴出的代码实现了最终效果,棒棒的~继续加油

2、线程池中的线程是会重复利用的,也就是说有可能会出现多个任务使用同一个 ThreadLocal

祝学习愉快~

  • 提问者 rock221 #1

    也就是说有可能会出现多个任务使用同一个 ThreadLocal 什么意思啊?是线程复用了初始化的对象,出现了安全问题吗?

    2021-06-20 17:45:00
  • 好帮手慕小班 回复 提问者 rock221 #2

    同学你好,同学可以这样理解:在使用中,数据是在线程池创建时绑定在线程上的,而线程池中的线程是会重复利用的,所以会可能会出现多个任务可能会访问使用同一个 ThreadLocal,造成线程安全问题。

    祝学习愉快~

    2021-06-20 19:09:49
  • 提问者 rock221 回复 好帮手慕小班 #3

    是同一个线程 重复使用了初始化的对象吧 ?  

    2021-06-20 19:17:48
rock221 提问者 2021-06-19 18:23:22

追加,对于threadLocal 有点晕,  使用这个会出现多线程不安全的情况,因为并发会导致多个线程调用同一个threadLocal对象,因为这个对象是statc唯一的,共享的。然后这个对象里面去new我们需要工具对象,  每次线程调用threadLocal的get方法时,获取工具对象, 那下次同一个线程再次调用get方法,执行不同的任务时,会重新创建工具对象吗?还是从threadLocal取出之前使用过的, ? 

2、 如果每次都创建的话, 那就和new 直接创建工具类是一样的,那使用threadLocal去创建有什么好处呢???

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师