草庐IT

Tread多线程

全部标签

java - 如果它实际计算就不可能中断线程?

鉴于此代码...publicclassSimpleTest{@TestpublicvoidtestCompletableFuture()throwsException{Threadthread=newThread(SimpleTest::longOperation);thread.start();bearSleep(1);thread.interrupt();bearSleep(5);}publicstaticvoidlongOperation(){System.out.println("started");try{booleanb=true;while(true){b=!b;}}ca

JavaFX : After setting text in textArea, 在单独的线程中设置滚动到底部不起作用

我创建了一个JavaFX应用程序,我在其中使用一个后台进程更新日志。所以我在TextArea中设置日志文本并使用logs.setScrollTop(Double.MAX_VALUE)设置滚动到底部。但滚动条设置为从底部向上一点。我还尝试了ScrollPan中的TextFlow并使用logDisplay.setVvalue(1.0)设置滚动到底部。它也给出了相同的结果。Platform.runLater(()->{logs.setText([settinglogtext]);//TextArealogslogs.setScrollTop(Double.MAX_VALUE));});//F

java - 我如何测量有多少线程正在执行一段代码?

我正在尝试测量有多少线程同时执行一段代码。目前我正在(ab)为此使用信号量,有没有更好的方法?finalintMAX_THREADS=Integer.MAX_VALUE;Semaphores=newSemaphore(MAX_THREADS);s.acquire();//startofsection//dosomecomputations//trackhowmanythreadsarerunningthesectiontrackThreads((MAX_THREADS-s.availablePermits()));s.release();//endofsection

java - 为什么要恢复在线程池线程中运行的任务的中断标志

此片段来自JCIP(BrianGoetz)list6.15f.get()抛出InterruptedException和ExecutionException。现在,这些异常(exception)是特定于future的吗?意味着future所代表的特定任务被中断或有内部异常。问题-为什么我需要使用“Thread.currentThread().interrupt()”恢复中断?,因为我的任务运行的线程的中断标志不是吗?这有点令人困惑。为什么抛出launderThrowable异常?如果其中一个downloadImage有问题,我们不应该只处理其他下载的图像而不是从这里扔掉,从而“不”处理剩

java - 线程创建监听器

java可以写线程创建监听器吗?例如使用aop?!我的意思是这样的,如果我的应用程序创建了一个线程,我想在我自己的表、容器或其他东西中注册这个对象。 最佳答案 我会创建一个线程,不断列出JVM上所有正在运行的线程。然后,每次它注意到出现了一个新线程时,它都会以任何一种方式通知您代码中的一个类。这里有一些关于如何列出当前在JVM上运行的所有线程的链接:GetaListofallThreadscurrentlyrunninginJavaListingAllRunningThreads============起始代码:ThreadCrea

java - Java 中的信号量和线程池

我不是很清楚Java中信号量的概念并试图理解它。我看了oracledocs(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html)和其他一些页面后的理解,它类似于锁计算许可数量。它通常用于创建资源池。在这里我感到困惑,还有ThreadPoolExecutor可以给我一个线程池。那么区别是什么呢?在什么场景下使用哪个? 最佳答案 首先,没有愚蠢的问题...Semaphore允许多个线程“获取”资源。他们应该检查资源是否可用。它就

java - "private final Object"锁在java多线程中有什么用?

Java多线程中“privatefinalObject”锁定的用途是什么?就我的理解而言,我认为要使一个类成为线程安全的,我们应该在我们将所有方法标记为同步的地方使用内部锁定,然后使用“this”将它们锁定在对象的监视器上?或者我们可以用方法内部的私有(private)最终对象锁替换在类的“this”上标记为同步的方法,以锁定通用对象锁以使其线程安全?例如使用内部锁定的代码:publicclassCounter{//Locksontheobject'smonitorpublicsynchronizedvoidchangeValue(){//...}我们可以用下面的外部锁替换上面的代码:

Java 线程 - 阻塞状态

我有一个非常基本的问题。如果一个线程忙于IO操作,为什么不认为它处于RUNNING状态?如果IO操作花费很长时间,则意味着线程正在执行其工作。当一个线程实际执行它的工作时,它如何被称为BLOCKED? 最佳答案 不知道你在哪看到有一个线程在做IO的时候处于BLOCKED状态。BLOCKEDstatedocumentation说:Threadstateforathreadblockedwaitingforamonitorlock.Athreadintheblockedstateiswaitingforamonitorlocktoent

java - 如何(全局)替换Java并行流的公共(public)线程池后端?

我想全局替换Java并行流默认使用的公共(public)线程池,例如,IntStream.range(0,100).parallel().forEach(i->{doWork();});我知道可以通过将此类指令提交到专用线程池来使用专用ForkJoinPool(请参阅CustomthreadpoolinJava8parallelstream)。这里的问题是是否可以用一些其他实现(例如Executors.newFixedThreadPool(10))替换常见的ForkJoinPool?是否可以通过某些全局设置(例如某些JVM属性)来实现?备注:我之所以喜欢替换F/Jpool,是因为它似乎

java - 如果超过 1 个线程访问,Spring @Cacheable 是否会阻塞?

如果标记为@Cacheable的方法需要10分钟才能完成,并且两个线程t1、t2访问该方法。t1在时间0访问(缓存方法现在是第一次运行)t2在时间t1+5mins访问这是否意味着t2将在大约5分钟内不会访问数据,因为t1已经开始了@Cacheable操作并且它应该在5分钟内完成(因为它已经运行了5分钟)还是t2会调用对@Cacheable的新调用? 最佳答案 如果第一次执行的结果没有被缓存,第二次调用将继续。您应该了解@Cacheable以缓存的内容为中心(而不是特定线程的执行上下文[嗯,有点;缓存仍然需要是线程安全的])。在执行方