草庐IT

Tread多线程

全部标签

Java 多线程 : Unexpected result

我正在开发企业应用程序。在多线程环境中运行应用程序时,我遇到了一些问题。我正在编写一个程序,其中有一个变量的值正在以非常快的速度(例如每秒10000次更新)更新(递增)。循环运行一定的迭代,变量的值递增并存储在HashMap中。一旦循环终止并打印HashMap中的变量值。我得到了意外的变量值。这是演示程序(请阅读评论以便更好地理解):classtestimplementsRunnable{staticConcurrentHashMapmap=newConcurrentHashMap();staticAtomicIntegervalue_to_be_incremented_stored=

java - 能否使用 fork/join 跨线程边界安全地移植非线程安全值?

我有一些不是线程安全的类:classThreadUnsafeClass{longi;longincrementAndGet(){return++i;}}(我在这里使用了long作为字段,但我们应该将其字段视为某种线程不安全类型)。我现在有一个看起来像这样的类classFoo{finalThreadUnsafeClassc;Foo(ThreadUnsafeClassc){this.c=c;}}也就是说,线程不安全类是它的一个final字段。现在我要这样做:publicclassJavaMM{publicstaticvoidmain(String[]args){finalForkJoinT

java - 处理线程最大执行时间的最佳方法(在 Java 中)

所以,我很好奇。您如何处理设置线程的最大执行时间?在线程池中运行时?我有几种技巧,但我对它们总是不太满意。所以,我想我会问问社区他们是怎么做的。 最佳答案 怎么样:将您的Callable提交给ExecutorService并保留返回的Future的句柄。ExecutorServiceexecutorService=...//CreateExecutorService.Callablecallable=newMyCallable();//Createworktobedone.Futurefut=executorService.subm

Java - 调用线程 : how does it route to Runnable interface's run ()? 上的启动方法

好的,我知道创建新线程并在Java中运行它的两种标准方法:在一个类中实现Runnable,定义run()方法,并将该类的一个实例传递给一个新的Thread.当调用线程实例上的start()方法时,会调用类实例的run方法。让类派生自Thread,这样它就可以覆盖方法run(),然后当一个新实例的start()方法被调用,调用被路由到覆盖的方法。在这两种方法中,基本上都会创建一个新的Thread对象并调用其启动方法。然而,在第二种方法中,调用被路由到用户定义的run()方法的机制非常清楚,(这是一个简单的运行时多态性),我不明白如何对Thread对象上的start()方法的调用被路由到实

java - 如何为多线程应用程序创建测试环境

全部,最近我开发了一个代码,据说是一个线程安全的类。现在我说“应该”的原因是因为即使在使用同步块(synchronizedblock)、不可变数据结构和并发类之后,由于JVM的线程调度环境,我也无法在某些情况下测试代码。也就是说,我只有纸上的测试用例,但无法复制相同的测试环境。是否有任何特定的指南或这里有经验的成员可以分享有关如何测试多线程环境的内容。 最佳答案 首先,您不能仅通过测试来确保您的类是完全线程安全的。无论您对其运行什么测试,您仍然需要让尽可能多的有经验的人检查您的代码,以检测细微的并发问题。也就是说,您可以像您所做的那

java - 是否可以安排 Quartz 线程每秒运行一次?

是否有可能让JavaQuartz线程每秒运行一次,甚至以毫秒为单位运行?看起来他们只能按分钟运行,仅此而已。 最佳答案 是的,您可以让它们每秒运行一次。看看TriggerUtils.makeSecondlyTrigger:Makeatriggerthatwillfireeverysecond,indefinitely.或者使用CronTrigger:newCronTrigger("cronTrigger","group","*****?");//fireateveryseconddaily

java - 线程 "AWT-EventQueue-0"中的异常?

我正在使用java和javax.swing开发一个简单的计算器程序基本上,当您按下按钮时,程序应该获取该按钮的功能(数字或操作)并将其显示在文本区域中。计算器本身的整个逻辑并不重要。此外,还有一个clear菜单项可以清除textArea中的所有文本。但是,每次按下按钮时,我都会收到以下错误:Exceptioninthread"AWT-EventQueue-0"java.lang.NullPointerExceptionatcalculator.CalculatorGUI.actionPerformed(CalculatorGUI.java:106)`当我按下清除菜单项时,我也遇到了类似

Java:如何按需唤醒线程?

假设我想创建一个基本上无限运行线程的对象。我希望线程在不需要他的时候进入休眠状态,但是当需要完成某些工作时,它会唤醒线程-完成工作并重新进入休眠状态。我还希望作业按照它们到达的顺序排队并执行。在cocoa/objectivec中有一个NSOperationQueue。不知道java有没有类似的东西。你怎么看? 最佳答案 我会使用像这样的ExecutorServiceprivatefinalExecutorServiceexecutor=Executors.newSingleThreadExecutor();publicvoidtas

java - 线程数和 Java 应用程序性能

您好:我有一个多线程Java应用程序。当前线程大小已经是100。我们目前使用的是4核CPU。但在不久的将来,CPU核心将增加一倍,甚至达到32核。为了充分利用内核,我们需要增加线程池的大小。但是您可能知道(也许我错了),Java在有10000个线程时很好,但是当线程为200、500、1000个线程时可能会出现性能问题。那么我们是否应该使用其他编程语言,例如scala。我的担心有道理吗? 最佳答案 使用现代JVM,Java进程可以创建操作系统允许的任意数量的线程。您的应用程序能否充分利用这些线程取决于您的应用程序的设计。如果可伸缩性是

java - 在 Java 中同步 2 个线程的更简单方法?

我不想确定主线程中的某些代码会在辅助线程执行某些代码之后执行。这是我得到的:finalObjectlock=newObject();finalThreadt=newThread(newRunnable(){publicvoidrun(){synchronized(lock){System.out.println("qwerty");lock.notify();}}});synchronized(lock){t.start();lock.wait();}System.out.println("absolutelysure,qwertyisabove");这是正确的解决方案吗?有没有更短的