草庐IT

【JavaEE】线程池

全部标签

java - 当有多个 quartz 线程时,让 quartz 只在一个线程中执行作业

我想知道是否可以将quartz配置为在任何给定时间执行仅在一个线程中运行的长时间处理作业。换句话说,假设我配置了大小为5的SimpleThreadPool的quartz。我有一个作业每10秒触发一次,但在某些情况下可能需要超过10秒才能完成。有没有办法配置quartz触发器/作业/调度程序,以便该触发器不会再次触发,因为它已经在另一个线程中处于运行状态。当触发器再次触发时,池中的另一个线程将拾取它并同时运行同一作业的两个实例。感谢您的输入。澄清:(关于使用大小为1的线程池的建议)。要求是将线程池配置为5个线程,并且任何单个作业在任何给定时间仅在单个线程中执行,换句话说,一个作业的实例应

java - 线程join()不等待

我正在尝试了解线程,但我不了解join()方法。我有一个线程(ThreadAdd.java),它将一个静态整数加1。publicclassThreadAddextendsThread{publicstaticintcount;@Overridepublicvoidrun(){try{Thread.sleep(100);}catch(InterruptedExceptionex){Logger.getLogger(ThreadAdd.class.getName()).log(Level.SEVERE,null,ex);}ThreadAdd.count++;}}在我的main方法中,我启动

java - 如何测量Java线程执行时间?

我想测量Java中的线程执行时间。现在我正在监视线程的开始和结束时间,但我认为它不太准确,因为线程可能会在执行期间挂起。 最佳答案 JavaMXBeans可以提供每线程CPU时间:importjava.lang.management.ManagementFactory;importjava.lang.management.ThreadMXBean;longnanos=ManagementFactory.getThreadMXBean().getThreadCpuTime(Thread.currentThread().getId())

java - 关于servlet的线程安全

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Howdoservletswork?Instantiation,sessionvariablesandmultithreadingservlet是线程安全的吗?例如,如果我打开5个不同的浏览器并向容器中的一个servlet发送请求,它是否仍然是线程安全的,我特别指的是service()方法

java - 具有非最终字段的不可变对象(immutable对象)如何成为线程不安全的?

假设我们有这个//Thisistriviallyimmutable.publicclassFoo{privateStringbar;publicFoo(Stringbar){this.bar=bar;}publicStringgetBar(){returnbar;}}是什么让这个线程不安全?继此question. 最佳答案 Foo在安全发布后是线程安全的。例如,这个程序可以打印“不安全”(它可能不会使用热点/x86的组合)——如果你将bar设置为final,它就不会发生:publicclassUnsafePublication{st

CUDA:来自不同扭曲的2个线程,但相同的块尝试写入相同的共享内存位置:危险吗?

这会导致共享内存中的不一致吗?我的内核代码看起来像这样(伪代码):__shared__uinthistogram[32][64];uintthreadLane=threadIdx.x%32;for(data){histogram[threadLane][data]++;}鉴于在具有64个线程的块中,带有ID“X”和“(X+32)”的线程通常会在矩阵中写入相同位置?该程序计算给定矩阵的直方图。我有一个类似的CPU程序,可以执行相同的操作。由GPU计算的直方图始终比CPU计算的直方图低1/128,我不知道原因。看答案有危险。它导致比赛条件。如果您不能保证一个块中的每个线程都具有对共享内存中位置的唯

java - 线程中的静态同步和非静态同步方法

任何人都可以解释一下声明......“静态同步方法和非静态同步方法不会互相阻塞-它们可以同时运行” 最佳答案 staticsynchronizedvoidtest(){foo();}等于staticvoidtest(){synchronized(MyClass.class){foo();}}同时synchronizedvoidtest(){foo();}等于voidtest(){synchronized(this){foo();}}这意味着:静态方法锁定在类的类对象上。非静态方法锁定在调用它们的实例上(默认情况下,synchroni

java - 多个线程迭代同一个 map

我最近在用Java编写并发程序时遇到了以下困境:假设您有一个全局数据结构,它是常规非同步、非并发库(例如HashMap)的一部分。是否可以允许多个线程在不同的交错周期遍历集合(仅读取,无修改),即当线程2在同一映射上获取他的迭代器时,线程1可能正在迭代一半? 最佳答案 没关系。能够做到这一点是创建迭代器这样的接口(interface)的原因。每个迭代集合的线程都有自己的迭代器实例来保存它的状态(例如,你现在在迭代过程中的位置)。这允许多个线程同时迭代同一个集合。 关于java-多个线程迭

Linux之线程概念

目录一、细粒度划分1、堆区细粒度划分2、物理内存和可执行程序细粒度划分3、虚拟地址到物理地址的转化二、线程的概念1、基本概念2、线程的优点3、线程的缺点4、线程异常 5、线程用途三、Linux下的进程和线程一、细粒度划分1、堆区细粒度划分在语言中,我们知道,用户自己申请的空间是存在于地址空间的堆区上的。可是,堆区是一整块空间,我们每次申请只是申请了其中的一小块,并且我们只是说明了申请空间的大小,拿到的是空间的起始地址。如果,我们多次申请了空间,那么我们怎么知道第一次申请的空间是从堆区哪里到哪里呢,第二次申请的空间是从堆区哪里到哪里呢?于是os就必须对堆区进行更加精细的管理。在Linux下,每次

java - 如何将 EDT 的结果传回另一个线程?

我有以下用例:我有代码在线程A中执行(不是EDT)。然后我想问用户一个问题,但这必须在EDT上完成,因为它涉及Swing代码(打开对话框等)。最后,我想将用户的回答传回线程A,以便它继续。我正在努力寻找一种将用户的答案传递回线程A的好方法。你是怎么做到的? 最佳答案 FutureTaskdialogTask=newFutureTask(newCallable(){@OverridepublicIntegercall(){returnJOptionPane.showConfirmDialog(...);}});SwingUtiliti