- 浏览: 293580 次
- 性别:
文章分类
- 全部博客 (105)
- windows (6)
- spring (5)
- hibernate (6)
- log4j (3)
- html (8)
- Servlet (2)
- mysql (4)
- java (18)
- tomcat (5)
- 数据库 (4)
- eclipse (5)
- css (2)
- word (1)
- javascript (8)
- 手机 (5)
- 日志 (1)
- linux (9)
- ssh (1)
- 线程 (1)
- dom (2)
- 算法 (1)
- android (4)
- xp (1)
- http (4)
- web (3)
- 生活 (6)
- oracle (9)
- shell (4)
- plsql (2)
- ubuntu (9)
- 网络配置 (1)
- 编辑器 (2)
- C (1)
- C++ (2)
- cygwin (1)
- CDT (2)
- ios (1)
- g++ (1)
- gcc (2)
- 魔方 (1)
- chrome (2)
- 购物 (1)
- 游戏 (1)
- 模拟器 (1)
- weblogic (3)
- OSGi (1)
- transaction (2)
- fusioncharts (1)
- jta (1)
- 加密 (1)
- RSA (1)
- jBPM (2)
- jboss (1)
- wildfly (1)
- 电子书 (1)
- example code (1)
- redis (1)
- jemalloc (1)
- libc (1)
- sokect (1)
- nio (1)
- office (1)
- elastic-job (1)
- zookeeper (1)
- quartz (1)
- webservice (3)
- axis (1)
- CentOS7 (1)
- VM (1)
- hbase (3)
- maven (1)
- 硬件 (1)
- 单片机 (1)
- 电路图 (1)
- axis2 (1)
- jaxws (2)
- vpn (1)
- pptp (1)
- CKFinder (1)
- utf-8 (1)
- jdk (2)
- tail (1)
- cmd (2)
- srvany (1)
- rktool (1)
- python (1)
- tensorflow (1)
- 字符编码 (2)
- wget (1)
- ftp (1)
- jsp (0)
- nginx (1)
- openlayer (1)
- GEO (1)
- geojson (1)
- wgs84经纬度坐标系 (1)
- wgs84 墨卡托投影坐标系 (1)
- 连接池 (1)
- jdbc (1)
- druid (1)
- 文档 (0)
- iso week (1)
- date (1)
- golang (0)
- vscode (0)
- fiber (0)
最新评论
-
cybersnow:
恩不错,谢谢
The 'manifest_version' key must be present and set to 2 (without quotes). -
LinApex:
这样效率很低哦
在js、css中嵌入java/jsp代码 -
bnmnba:
369485270 写道楼主在吗 你这个注解方式根本就不行 ...
hibernate 获取实体的表名、主键名、列名 -
黄浦江:
Mysql 5.6.5 noInstall 版本下没有my.i ...
Can't connect to MySQL server on 'localhost' (10061) -
369485270:
楼主在吗 你这个注解方式根本就不行 报错啊 org.hibe ...
hibernate 获取实体的表名、主键名、列名
一个线程池里放两个线程、四个任务(runnable)。两个线程执行四个runnable。threadlocal的值被相同的线程共享,而可能是不同的任务。
看代码:
package thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestThreadPoolExecutor{ public static void main(String[] args) throws InterruptedException { int threadNum=2;//实际启动的线程数 int taskNum=4;//要运行的runnable数量,他们共享以上个数的线程 ExecutorService threads=Executors.newFixedThreadPool(threadNum); for (int i = 0; i < taskNum; i++) { threads.execute(new MyRunnable("thread"+i)); } while(!threads.isTerminated()){ Thread.sleep(1000); if (!threads.isShutdown()) { threads.shutdown(); System.out.println("线程池已经,停止接收任务准备停止"); try{ threads.execute(new MyRunnable("threadN")); }catch (Exception e) { e.printStackTrace(); } } } System.out.println("线程池已经终止"); Thread.sleep(5000); System.out.println("主程序退出"); } } class MyRunnable implements Runnable{ private String name; public MyRunnable(String name){ this.name=name; } public static ThreadLocal<Integer> locInt=new ThreadLocal<Integer>(){ protected Integer initialValue() { return 0; } }; public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } int i=locInt.get(); System.out.println(Thread.currentThread().getId()+" "+name+"的i:"+i); i++; locInt.set(i); } }
运行结果:
线程池已经,停止接收任务准备停止java.util.concurrent.RejectedExecutionException at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1760) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658) at pp.thread.TestThreadPoolExecutor.main(TestThreadPoolExecutor.java:20) 8 thread0的i:0 9 thread1的i:0 8 thread2的i:1 9 thread3的i:1 线程池已经终止 主程序退出
发表评论
-
Linux Centos 7.2 JDK 1.7.0 Tomcat8.5 部署的web应用(连接池druid),长时间不用后,再次访问很慢卡住
2019-11-07 15:17 1015JDK 1.7.0 + Tomcat 8.5 部署的web ... -
Windows服务器终结者
2018-05-18 14:57 516windows服务器终结者。 作用:远程访问服务器 ... -
linux wget命令下发FTP时,包含中文路径提示文件不存在,无法下载文件解决方法
2017-12-01 16:09 3359文件不存在的原因是因为编码不同,服务器认为请求地址的 ... -
linux乱码,文件名乱码、文件内容乱码,JDK编码。 CKFinder文件名称乱码 (使用UTF-8解决)
2017-07-15 14:46 1753我遇到一个问题,CKFinder后台获取到的文件名是问号。 ... -
带图片上传文件上传的CKEditor(java实现后台文件存储)
2016-07-14 16:04 1141解压后放到web项目webapp文件夹里,空文件夹up ... -
java 非阻塞sokect客户端
2016-05-16 17:30 997网上有比较多的服务端非阻塞的nio示例代码。 但客户端基 ... -
非对称加密、公钥和私钥简要说明,Java实现RSA加密/解密/签章/验章
2016-03-05 21:29 1701提示: 1、公钥加密只能用私钥解密。 2、私钥加密只能 ... -
二维数组绕圈赋值
2013-08-22 16:54 900小例子一个: package pack; publ ... -
eclipse java debug 修改变量
2013-08-13 11:05 11211.加入断点。 2.开始调试。 3.打开透视图Windo ... -
Session
2013-06-22 11:29 932一篇session讲解的文章: http://www.c ... -
Java动态代理模式
2013-03-13 18:17 1391动态代理可以模拟实现一个接口指向一个未实现这个接口的 ... -
01背包问题
2012-08-30 19:09 1105动态规划:http://zh.wikipedia.org/zh ... -
mysql 数据类型 JAVA 类型 对照
2012-02-24 11:53 1171mysql 数据类型 JAVA 类型 对照 http://z ... -
eclipse:failed to create the java virtual machine
2012-02-13 13:18 1058eclipse启动报错:failed to create th ... -
Spring Autowire自动装配
2012-02-13 11:56 1094如果你发现你正在研究的一个基于spring的项目的某个方法被奇 ... -
hibernate报错:Cannot add or update a child row: a foreign key constraint fails
2012-02-12 21:40 14172我遇到这个问题的原因是:把主键作为外键关联到了其他表的主键。 ... -
java floa转到doublet精度变化,数值变化
2012-02-09 17:17 1122看以下程序的输出结果: public void tes ... -
通过RGB颜色得到十六进制的颜色值
2012-02-07 13:26 1383没有验证越界。代码如下: public c ...
相关推荐
但是,在Hystrix线程隔离模式下,ThreadLocal数据可能会丢失,因为Hystrix将请求放入Hystrix的线程池中去执行,这时候某个请求就有A线程变成B线程了,ThreadLocal必然消失了。 知识点3:线程切换导致ThreadLocal...
TransmittableThreadLocal 是一种专门为线程池设计的ThreadLocal解决方案,可以实现跨线程池之间的数据传递。它可以在多个线程池之间传递数据,解决了ThreadLocal 的局限性。 TransmittableThreadLocal 的实现原理...
在服务器端,线程池的存在可能导致多个用户的请求被分配到同一个线程处理,因此,如果不注意清理,ThreadLocal变量可能会被不同用户访问到,造成数据泄露。 误区三:每个用户访问会有新的ThreadLocal 理论上来讲,...
线程锁通过`synchronized`关键字确保了共享资源的互斥访问,而线程池则通过高效地管理和复用线程,提高了系统的并发性能。在实际开发中,理解并合理运用这些机制,能够帮助我们编写出更加稳定和高效的多线程程序。
3. **线程池中的ThreadLocal**: 在使用线程池时,线程可能会复用,之前的ThreadLocal值可能会影响后续的任务。因此,如果在使用线程池时依赖ThreadLocal,需要特别处理线程退出或清理ThreadLocal。 总的来说,...
Java单线程ThreadLocal串值问题解决方案 Java单线程ThreadLocal串值问题解决方案主要介绍了Java单线程ThreadLocal串值问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...
4. **注意线程池中的ThreadLocal**:线程池中的线程可能会被重用,若不清理ThreadLocal,可能导致后续任务访问到错误的变量副本。 通过理解ThreadLocal的原理和最佳实践,我们可以更有效地利用它来解决多线程环境下...
2. 如果是线程池里的线程用 ThreadLocal 会有什么问题? ThreadLocal 的拓扑图: 虚线代表这弱引用,当前线程保存了 ThreadLocalMap 作为自己的 local 属性,而 Map 中的 key 又弱引用了 ThreadLocal,从而达到了...
线程池会复用已存在的线程,减少创建和销毁线程的开销。通过`ThreadPool.QueueUserWorkItem`方法,我们可以将任务添加到线程池。 8. **异常处理**: 在多线程程序中,捕获和处理异常特别重要。每个线程都有自己的...
- **难以调试**:由于ThreadLocal的隐式性,有时可能会导致难以发现的问题,特别是当线程池中的线程复用时。 ### 4. 使用注意事项 - 使用完毕后,应调用`remove()`方法清除ThreadLocal变量,防止内存泄漏。 - 尽量...
9. **线程局部存储**:`ThreadLocal<T>`类允许在线程中创建局部变量,每个线程拥有自己的副本,互不影响。 10. **线程优先级**:虽然可以设置线程优先级,但不推荐频繁使用,因为操作系统调度策略可能使得高优先级...
而 Tomcat 中,每个请求都会创建新的线程来处理,这些线程在处理完请求后,通常不会立即终止,而是进入线程池等待下一次复用。因此,只要线程还在,`ThreadLocal` 中的 `MyCounter` 对象就不会被垃圾收集,也就意味...
- 在并发量非常大或者资源有限的环境中,过多使用ThreadLocal可能导致线程池中的线程复用问题,使得新线程获取到旧线程的数据,这时应谨慎使用。 总之,ThreadLocal是Java中处理线程安全问题的一种有效手段,尤其...
4. 在Servlet容器中,谨慎使用InheritableThreadLocal,因为线程池中的线程可能会被复用,可能导致错误的会话信息传递。 总之,理解并熟练运用ThreadLocal和InheritableThreadLocal是Java并发编程中不可或缺的知识...
1. 初始化:每个工作线程在启动时,可能会初始化一些线程局部变量,如ThreadLocal,以便在执行任务时保持独立的数据环境。 2. 执行任务:PooledThread会有一个run方法,该方法从工作队列中取出任务并执行。执行完毕...
这样,即使在线程池环境下,每次任务执行时使用的就是线程私有的变量,不会产生线程安全问题。 在Java中,一个无状态的Bean(比如只有方法没有实例变量的类)是线程安全的,因为它不存储任何线程共享的状态。而有...
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程状态的转换 ...Java线程:深入ThreadLocal 一、标准例子 二、不用ThreadLocal 三、自己实现个ThreadLocal 四、透过现象看本质 Java线程:大总结
1. **线程未正确销毁**:如果线程执行完毕后没有正确销毁或者线程池中线程长期存活,而`ThreadLocal`对象又未能及时清除,那么线程内的`ThreadLocalMap`将会持续占用内存,进而可能导致内存泄漏。 2. **...
10. **线程局部变量(ThreadLocal)**:为每个线程提供独立的变量副本,确保线程间的隔离,避免了共享状态带来的问题。 实战部分将通过具体的代码示例展示如何创建和管理线程,如何实现线程同步,以及如何利用...
`ExecutorService`是线程池的接口,可以使用`Executors`工厂类创建不同类型的线程池,如固定大小线程池、可缓存线程池、单线程线程池等。 总之,Java多线程与并发编程是Java程序员必须掌握的核心技能,它涉及到操作...