在过去的几年里,我主要在Eclipse中进行UI开发,这在线程访问方面非常保守:任何尝试从UI线程外部更改UI小部件的属性(例如,颜色、文本)抛出异常。我现在正在查看Swing中的一个现有程序,它有一个带有大量自定义小部件的窗口。有一个单独的线程为这些小部件中的每一个运行一个变异函数,变异函数读取一些东西的值(例如,标签颜色和值)并写入一些(例如,更改背景颜色)。请注意,没有涉及自定义绘画或类似内容,只是对它包含的主要是JLabel的子小部件进行了一系列更改。目前,它从单独的线程运行,而不是从Swing事件线程运行。该线程遍历所有400个小部件并在每个小部件上调用mutator。更新似
具体来说,有人能告诉我这段代码有什么问题吗?它应该启动线程,所以应该打印“Enteringthread..”5次,然后等待直到调用notifyAll()。但是,它随机打印“Entering..”和“Done..”并继续等待其他人。publicclassThreadTestimplementsRunnable{privateintnum;privatestaticObjectobj=newObject();ThreadTest(intn){num=n;}@Overridepublicvoidrun(){synchronized(obj){try{System.out.println("E
我有一个简单的控制台应用程序,它在多个线程(其中10-20个)中运行计算。现在我正在尝试创建一个简单的GUI,它允许我选择要处理的文件并从所有线程打印日志。因此,我为我的日志创建了一个带有JTextArea的swingGUI,并创建了一个将信息记录到日志的方法:publicsynchronizedvoidlog(Stringtext){logArea.append(text);logArea.append("\n");if(logArea.getDocument().getLength()>50000){try{logArea.getDocument().remove(0,5000);
我正在开发一个有一些线程的Java应用程序。我在控制台中打印threadId,例如17、18、19等等。但是当我打开调试透视图时,我有这个“调试”窗口(最左上角的窗口),它显示了当前线程,但它们使用[Thread-2]、[thread-3]。数字不一定与ThreadId匹配。有什么方法可以将我在控制台中获得的ThreadId与“调试”窗口中显示的线程相关联? 最佳答案 我不知道有什么办法可以做到这一点。然而,还有另一种方法。这些线程名称由您正在使用的Thread构造函数自动生成。但是,有一个名为Thread.setName()的方法
我有一个服务器程序可以轮询数据库以获取新请求,我希望每隔1分钟进行一次轮询,所以我在程序中设置了一个Thread.sleep()while循环。问题是每当这个程序应该“hibernate”时,CPU消耗就会急剧上升(即大约25-30%)。矛盾的是,当程序不处于hibernate状态,忙于处理请求时,CPU消耗下降到0.4%。我在网上阅读并发现与thread.sleep相关的性能下降,但我找不到任何可行的替代方案(Thread.wait需要通知对象,我觉得这在我的场景中是无用的)主循环(当没有新请求时)不做任何事情,这是当CPU消耗为25%时正在做的所有事情的框架->投票->没有新记录?
除了Memcache的以下用途外,我的java应用程序引擎项目不会在请求之间保留任何状态:Objectify使用内存缓存来缓存数据存储获取我使用内存缓存作为在多个请求后批量清理任务的方法(例如if(thememcachedoesn'tthinkacleanuptaskisalreadyrunning)scheduleanothercleanuptask)。我没有对任何对象的全局/静态引用,除了:当前经过身份验证的用户保存在staticThreadLocal中目的。这意味着每个请求都将获得自己的用户副本,对吧?我有一个处理所有数据操作的类,一个实例作为一种全局变量保存在staticDat
我有一个实现runnable的线程类和一个作为实例变量的int计数器。两个同步方法add和sub。当我以某种方式运行我的测试类时,它会打印几次错误的结果。据我了解,当一个方法被同步时,整个对象将被锁定以供其他线程访问,每次我们都应该得到相同的结果时使用这种逻辑吗?有些情况并非如此。我错过了什么吗?我的机器是Windows7,64位。publicclassThreadClassimplementsRunnable{intcounter=0;@Overridepublicvoidrun(){add();sub();}publicsynchronizedvoidadd(){System.ou
我有一个需要线程安全的共享map数据结构。同步是读取或添加到map的最有效方式吗?谢谢!编辑:数据结构是一个不可更新的缓存,即一旦填满它就不会更新缓存。因此,最初有很多写入和一些读取,然后主要是读取 最佳答案 “最有效率”当然是相对的,要看你的具体情况。但是考虑像ConcurrentHashMap这样的东西如果您希望有多个线程同时处理map;它是线程安全的,但仍然允许并发访问,这与Hashtable或Collections.synchronizedMap()不同。 关于java-使数据结
假设我有一个像这样运行的线程:privatebooleanworking=true;@Overridepublicvoidrun(){working=true;//dosomethingworking=false;....}在我的主线程中,我不断地展示正在使用的状态while(threadClassObject.isWorking()){System.out.println(threadClassObject.isWorking());}这行得通吗?我试过这个例子,它似乎有效。但是有没有办法让它崩溃呢?什么例如如果线程正在改变工作状态,而同时主线程试图读取它,会发生这种情况吗?
以下问题在我的一次采访中被问到(几年前)Whatareallthepossibilities/waystobringthedeadthreadbacktoalive(RunnableState)我辩解说没有办法。但他敦促我思考。真的有可用的选项吗?或者他只是在检查我对我的回答的信心? 最佳答案 死亡状态:线程在其run()方法完成时可以被视为死亡。如果任何线程进入此状态,则意味着它永远无法再次运行。 关于Java-让死线程复活,我们在StackOverflow上找到一个类似的问题: