理解高并发(18).编写自己的threadlocal
来源:互联网 发布:海绵软件 编辑:程序博客网 时间:2024/06/07 03:42
李四 当前投票次数 :5
张三 当前投票次数 :4
李四 当前投票次数 :6
张三 当前投票次数 :5
李四 当前投票次数 :7
张三 当前投票次数 :6
李四 当前投票次数 :8
张三 当前投票次数 :7
李四 当前投票次数 :9
张三 当前投票次数 :8
李四 当前投票次数 :10
张三 当前投票次数 :9
李四 over
张三 当前投票次数 :10
张三 over
源码如下:
- MyThreadLocal.java
package com.test.thread.demo12;
import java.util.HashMap;
import java.util.Map;
public abstract class MyThreadLocal<T> {
public T get(){
MyThread thread = (MyThread) Thread.currentThread();
Map<String, Object> map = thread.map;
if(map == null){
thread.map = new HashMap<String, Object>();
thread.map.put(this.toString(), initValue());
return initValue();
}
return (T)thread.map.get(this.toString());
}
public void set(T t){
MyThread thread = (MyThread) Thread.currentThread();
Map<String, Object> map = thread.map;
if(map == null){
thread.map = new HashMap<String, Object>();
}
thread.map.put(this.toString(), t);
}
public void remove(){
//MyThread thread = (MyThread) Thread.currentThread();
//thread.map.clear();
}
abstract public T initValue();
}
- MyThread.java
package com.test.thread.demo12;
import java.util.Map;
public class MyThread extends Thread{
public Map<String, Object> map = null;
public MyThread(Runnable runnable){
super(runnable);
}
}
- Ticket.java
package com.test.thread.demo12;
public class Ticket {
MyThreadLocal<Integer> times = new MyThreadLocal<Integer>(){
@Override
public Integer initValue() {
return 0;
}
};
public void select() {
int t = times.get();
t++;
times.set(t);
System.out.println(Thread.currentThread().getName() + " 当前投票次数 :" + times.get());
if (times.get() == 10) {
System.out.println(Thread.currentThread().getName() + " over");
times.remove();
}
}
}
- TestClient.java
package com.test.thread.demo12;
public class TestClient {
public static void main(String[] args) {
final Ticket ticket = new Ticket();
Thread t = new MyThread(new Runnable(){
public void run(){
for(int j=0; j<10; j++){
ticket.select();
}
}
});
t.setName("张三");
Thread t2 = new MyThread(new Runnable(){
public void run(){
for(int j=0; j<10; j++){
ticket.select();
}
}
});
t2.setName("李四");
t.start();
t2.start();
}
}
阅读全文
0 0
- 理解高并发(18).编写自己的threadlocal
- 理解高并发(17).threadlocal原理及用法
- ThreadLocal的一些自己的理解
- 高并发的简单理解
- Java 并发:深入理解 ThreadLocal
- Java 并发:深入理解 ThreadLocal
- 【多线程高并发】ThreadLocal,高并发下的单例模式
- 理解高并发(16).自己动手编写Future、Callable
- 并发编程之ThreadLocal类的理解(一)
- 并发编程之ThreadLocal类的理解(二)
- 理解高并发(2).我对并发编程的理解
- 设计自己的高并发架构
- 自己对ThreadLocal的理解(作为讨论)
- 自己编写高负荷测试的工具
- 我对高并发的理解
- 《Java高并发程序设计》学习 --4.3 ThreadLocal
- (转)java并发编程: 彻底理解ThreadLocal
- 对ThreadLocal的理解
- 正则表达式用法与介绍
- hdu3336—Count the string(kmp+dp)
- LeetCode WIith JS || 66. Plus One [数组存储的数据加一]
- 重新学习位运算
- 完美解决java.sql.SQLException: Access denied for user 'root'@'localhost' (using password YES)
- 理解高并发(18).编写自己的threadlocal
- 停止线程
- Servlet实现导出下载csv文件
- 读取注册表内容
- js模块化规范
- 一个字符替换的算法
- Thinkphp 模型->快捷查询
- 文件上传Content-disposition中Attachment和inline的区别
- quartz快速入门(一)