草庐IT

Tread多线程

全部标签

java - 是否可以通过在 run() 方法中调用 run() 来启动线程?

我知道不应该调用run方法来启动新线程执行,但我指的是thisarticle他们在另一个run方法中调用了runnable.run();,这似乎暗示它启动了一个新线程或者根本没有creating/strong>线程,它只是创建一个新线程并在同一线程中运行所有可运行的线程,即逐个任务?这是文章提到的代码。publicclassThreadPool{privateBlockingQueuetaskQueue=null;privateListthreads=newArrayList();privatebooleanisStopped=false;publicThreadPool(intnoO

java - Spring 的线程

我有一个使用spring、hibernate和struts的Web应用程序(它在Tomcat上运行)调用顺序是这样的……StrutsAction调用spring服务bean,后者又调用SpringDAObean。DAO实现是一个Hibernate实现。问题是我所有的springbean都会在同一个线程中运行吗?我可以在ThreadLocal中存储一些东西并在另一个bean中获取它吗?我很确定这在无状态sessionBean中行不通。EJB容器可以(或将会)为每次调用sessionbean生成一个新线程spring容器会做同样的事情吗?即在同一线程中运行所有bean?当我尝试JUnit测

java - 变量的线程安全设置(Java)?

给定以下代码:publicclassFooBar{publicstaticvolatileConcurrentHashMapmyConfigData=newConcurrentHashMap();}publicclassUpdaterThreadimplementsRunnable{publicvoidrun(){//QuerytheDatafromtheDBandUpdatetheFooBarconfigDataFooBar.myConfigData=ConfigDataDAO.getLatestConfigFromDB();}}线程类将定期更新myConfigData成员变量(每5

Java:ExecutorService 的效率不如手动线程执行?

我有一个多线程应用程序。当使用Thread.start()手动启动线程时,每个并发线程恰好使用25%的CPU(或恰好一个核心-这是在四核机器上)。因此,如果我运行两个线程,CPU使用率正好是50%。然而,当使用ExecutorService运行线程时,似乎有一个“幽灵”线程正在消耗CPU资源!一个线程使用50%而不是25%,两个线程使用75%,等等。这会不会是某种Windows任务管理器的产物?执行者服务代码是ExecutorServiceexecutor=Executors.newFixedThreadPool(threadAmount);for(inti=1;iThread.sta

java - 立即停止线程

我想立即停止正在运行的线程。这是我的代码:A类:publicclassA(){publicvoidmethodA(){For(intn=0;nB类:publicclassB(){publicvoidrunEverything(){Runnablerunnable=newRunnable(){@Overridepublicvoidrun(){try{Thread.sleep(1000);Aa=newA();a.methodA();}catch(InterruptedExceptione){e.printStackTrace();}}};Threadthread=newThread(run

java - 为什么一个单线程的java程序有这么多线程?

我有一个有13个线程的java程序,尽管其中只有一个线程的CPU使用率为99%,并且已经运行了大约24小时。其他的CPU使用率为0.0%,显示TIME+的任何位置,从0:00.0到0:12.82,其中一个有3:51.48。该程序旨在成为单线程程序,所以我想知道为什么还有其他线程?他们在做什么,为什么他们显示的CPU使用率和TIME+这么少?更新:我有一个我写的旧java程序(第一个程序-不要评判我!)它是单线程的并且显示相同类型的线程使用......importjava.io.*;classxdriver{staticintN=100;staticdoublepi=3.14159265

java - Java 中有什么方法可以记录*每个*线程中断吗?

每次调用Thread.interrupt()时,我都想以某种方式进行记录,记录哪个线程发出调用(及其当前堆栈)以及识别有关哪个线程被中断的信息。有没有办法做到这一点?搜索资料,看到有人提到实现安全管理器的可能性。这是可以在运行时完成的事情(例如,在Applet或WebStart客户端中),还是您需要使用已安装的JVM来执行此操作?或者有更好的方法吗? 最佳答案 作为一个快速技巧,这比我想象的要容易很多。由于这是一个快速的hack,我没有做一些事情,比如在取消引用数组之前确保堆栈跟踪足够深等。我在我签名的Applet的构造函数中插入了

java - 多线程环境下的 HashMap 和哈希表

我真的很困惑这两个集合在多线程环境中的表现。哈希表是同步的,这意味着不会有2个线程同时更新它的值,对吧? 最佳答案 看ConcurrentHashMaps表示线程安全映射。它们提供了HashTable的所有功能,并且性能非常接近HashMap。性能是通过使用map范围锁而不是使用mapwidelock获得的,默认情况下该集合维护一个包含16个锁的列表,每个锁用于锁定map的一个bucket。您甚至可以配置桶的数量:)根据您的数据调整此项可以帮助提高性能。BrianGoetz的《Java并发实践》我怎么推荐都不为过http://jci

java - 编写在多线程 Java 环境中更新两个对象的方法的最佳方法?

假设我们有一个名为AccountService的类来管理帐户的状态。AccountService定义为interfaceAccountService{publicvoiddebit(account);publicvoidcredit(account);publicvoidtransfer(Accountaccount,Accountaccount1);}根据这个定义,实现transfer()的最佳方式是什么,这样您就可以保证transfer是一个原子操作。我对引用Java1.4代码的答案以及可能使用Java5中java.util.concurrent资源的答案感兴趣

java - 一个关于Java多线程的问题

假设下面的类publicclassTestObject{publicvoidsynchronizedmethod1(){//some1000linesofcode}publicvoidmethod2(){//some1000linesofcode}}假设有两个线程访问同一个TestObject类实例,我们称它们为t1和t2。我想知道在以下情况下会发生什么。当t1正在访问method1()的中途时。现在t2正在尝试访问method2()。当t1正在访问method2()的中途时。现在t2正在尝试访问method1()。我的理解是,对于第一个问题,线程t2不会被授予权限,因为object将