public class ThreadUtil {
public static void main(String[] args) throws InterruptedException {
PrimeRun p = new PrimeRun();
System.out.println("多线程中的变量:");
for(int i=0;i<10;i++){
new Thread(p).start();
}
Thread.sleep(1000);
System.out.println("当前线程中的变量:");
System.out.println(p.getParam()+">>>>>>"+p.getT().get());
}
}
public class PrimeRun implements Runnable {
private static int param=0;
private static ThreadLocal t=new ThreadLocal();
static{
t.set(0);
}
public void run() {
t.set(param++);
System.out.println(param+">>"+t.get());
}
public static int getParam() {
return param;
}
public static void setParam(int param) {
PrimeRun.param = param;
}
public static ThreadLocal getT() {
return t;
}
public static void setT(ThreadLocal t) {
PrimeRun.t = t;
}
}
运行结果::
多线程中的变量:
1>>0
2>>1
3>>2
5>>4
5>>3
7>>5
8>>7
9>>8
7>>6
10>>9
当前线程中的变量:
10>>>>>>0
说明:::
1. ThreadLocal变量在各个线程中相互独立,即:操作的只是
ThreadLocal变量的副本,本身并没有改变。
2. Runnable,Thread 只是实现多线程的一种方式,非ThreadLocal变量在各个线程中是共享的,即:操作的是
变量本身。
分享到:
相关推荐
线程的创建有继承Thread类和实现Runnable接口两种方式,通过Runnable方式可以更加容易实现多线程之间资源共享。 通过sleep可以使线程进入休眠状态,通过join方法可以让线程处于等待,其他线程执行完毕后继续执行。 ...
│ 高并发编程第二阶段33讲、多线程Thread-Per-Message设计模式.mp4 │ 高并发编程第二阶段34讲、多线程Two Phase Termination设计模式-上.mp4 │ 高并发编程第二阶段35讲、多线程Two Phase Termination设计模式-...
│ 高并发编程第二阶段33讲、多线程Thread-Per-Message设计模式.mp4 │ 高并发编程第二阶段34讲、多线程Two Phase Termination设计模式-上.mp4 │ 高并发编程第二阶段35讲、多线程Two Phase Termination设计模式-...
【多线程】多线程的实现方式Thread、Runnable、Callable 72 【多线程】实现Runnable接口与继承Thread类比较 73 【多线程】线程状态转换 74 【多线程】线程的调度 75 线程优先级 75 sleep 76 wait 76 yield 77 join ...
(1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程...
多线程示例####1.1 ThreadLocals + ThreadPools 该模块通过确保在 Runnable 执行结束时删除 ThreadLocal 上下文来测试内存泄漏保护####1.2。 分叉和加入本模块用于测试 Fork And Join ####1.3。 通过 RMI 使用信号...
5.7.1 多态性 151 5.7.2 引用变量的强制类型转换 152 5.7.3 instanceof运算符 154 5.8 继承与组合 154 5.8.1 使用继承的注意点 155 5.8.2 利用组合实现复用 156 学生提问:使用组合关系来实现复用时,需要创建...
1、ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); //获取当前线程类加载器 2、InputStream is = classLoader.getResourceAsStream("文件路径/文件名");//通过当前线程的类...
1.2 创建多线程...................................................................................................................7 1.2.1 继承Thread 创建线程...............................................
线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .........................
2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .....................