草庐IT

Tread多线程

全部标签

java - 如何在 Eclipse 调试透视图中识别线程?

我正在开发一个有一些线程的Java应用程序。我在控制台中打印threadId,例如17、18、19等等。但是当我打开调试透视图时,我有这个“调试”窗口(最左上角的窗口),它显示了当前线程,但它们使用[Thread-2]、[thread-3]。数字不一定与ThreadId匹配。有什么方法可以将我在控制台中获得的ThreadId与“调试”窗口中显示的线程相关联? 最佳答案 我不知道有什么办法可以做到这一点。然而,还有另一种方法。这些线程名称由您正在使用的Thread构造函数自动生成。但是,有一个名为Thread.setName()的方法

java - 使用 Thread.sleep 线程 hibernate 时的 CPU 消耗

我有一个服务器程序可以轮询数据库以获取新请求,我希望每隔1分钟进行一次轮询,所以我在程序中设置了一个Thread.sleep()while循环。问题是每当这个程序应该“hibernate”时,CPU消耗就会急剧上升(即大约25-30%)。矛盾的是,当程序不处于hibernate状态,忙于处理请求时,CPU消耗下降到0.4%。我在网上阅读并发现与thread.sleep相关的性能下降,但我找不到任何可行的替代方案(Thread.wait需要通知对象,我觉得这在我的场景中是无用的)主循环(当没有新请求时)不做任何事情,这是当CPU消耗为25%时正在做的所有事情的框架->投票->没有新记录?

java - appengine 上线程安全 java 的 list

除了Memcache的以下用途外,我的java应用程序引擎项目不会在请求之间保留任何状态:Objectify使用内存缓存来缓存数据存储获取我使用内存缓存作为在多个请求后批量清理任务的方法(例如if(thememcachedoesn'tthinkacleanuptaskisalreadyrunning)scheduleanothercleanuptask)。我没有对任何对象的全局/静态引用,除了:当前经过身份验证的用户保存在staticThreadLocal中目的。这意味着每个请求都将获得自己的用户副本,对吧?我有一个处理所有数据操作的类,一个实例作为一种全局变量保存在staticDat

java - 与 java 线程不一致的结果

我有一个实现runnable的线程类和一个作为实例变量的int计数器。两个同步方法add和sub。当我以某种方式运行我的测试类时,它会打印几次错误的结果。据我了解,当一个方法被同步时,整个对象将被锁定以供其他线程访问,每次我们都应该得到相同的结果时使用这种逻辑吗?有些情况并非如此。我错过了什么吗?我的机器是Windows7,64位。publicclassThreadClassimplementsRunnable{intcounter=0;@Overridepublicvoidrun(){add();sub();}publicsynchronizedvoidadd(){System.ou

java - 使数据结构线程安全的最有效方法(Java)

我有一个需要线程安全的共享map数据结构。同步是读取或添加到map的最有效方式吗?谢谢!编辑:数据结构是一个不可更新的缓存,即一旦填满它就不会更新缓存。因此,最初有很多写入和一些读取,然后主要是读取 最佳答案 “最有效率”当然是相对的,要看你的具体情况。但是考虑像ConcurrentHashMap这样的东西如果您希望有多个线程同时处理map;它是线程安全的,但仍然允许并发访问,这与Hashtable或Collections.synchronizedMap()不同。 关于java-使数据结

java - 从外部获取线程变量的值

假设我有一个像这样运行的线程:privatebooleanworking=true;@Overridepublicvoidrun(){working=true;//dosomethingworking=false;....}在我的主线程中,我不断地展示正在使用的状态while(threadClassObject.isWorking()){System.out.println(threadClassObject.isWorking());}这行得通吗?我试过这个例子,它似乎有效。但是有没有办法让它崩溃呢?什么例如如果线程正在改变工作状态,而同时主线程试图读取它,会发生这种情况吗?

java - 无法对可扩展方法进行多线程处理

更新:为了帮助阐明我要问的内容,我发布了一些java代码来理解这个想法。前一段时间我问了一个question关于如何让算法分解一组数字,我的想法是给它一个数字列表(1,2,3,4,5)和一个总数(10),它会计算出每个数字的所有倍数加起来等于总数('1*10'or'1*1,1*2,1*3,1*4'或'2*5'等)。这是我做过的第一个编程练习,所以我花了一段时间才开始工作,但现在我想看看我是否可以扩展它。最初问题中的人说它是可扩展的,但我对如何去做有点困惑。递归部分是我坚持缩放结合所有结果的部分的区域(它所指的表不可缩放但应用缓存我能够使其快速)我有以下算法(伪代码)://generat

Java - 让死线程复活

以下问题在我的一次采访中被问到(几年前)Whatareallthepossibilities/waystobringthedeadthreadbacktoalive(RunnableState)我辩解说没有办法。但他敦促我思考。真的有可用的选项吗?或者他只是在检查我对我的回答的信心? 最佳答案 死亡状态:线程在其run()方法完成时可以被视为死亡。如果任何线程进入此状态,则意味着它永远无法再次运行。 关于Java-让死线程复活,我们在StackOverflow上找到一个类似的问题:

java - 了解线程+异步

因此,我有一个程序需要将大量(例如10,000多个)GET请求发送到一个URL,并且我希望它尽可能快。当我第一次创建程序时,我只是将连接置于for循环中,但这确实很慢,因为它必须等待每个连接完成才能继续。我想使其速度更快,所以我尝试使用线程,它使速度有所提高,但我仍然不满意。我猜想正确的方法是使用异步连接并连接到所有URL,以使其真正快速地实现。这是正确的方法吗?另外,我一直在尝试了解线程及其工作方式,但似乎无法理解。我所在的计算机具有IntelCorei7-3610QM四核处理器。根据英特尔网站的规范,该处理器具有8个线程。这是否意味着我可以在Java应用程序中创建8个线程,它们将同

java - java同时运行两个线程

我已经使用timertask来安排我的java程序。现在,当timertask的运行方法正在运行时,我想运行两个同时运行的线程并执行不同的功能。这是我的代码..请帮助我..importjava.util.Calendar;importjava.util.Date;importjava.util.Timer;importjava.util.TimerTask;publicclasstimercheckextendsTimerTask{//myfirstthreadThreadt1=newThread(){publicvoidrun(){for(inti=1;i