草庐IT

Multithreading

全部标签

java - 将本地新对象传递给线程,线程安全吗?

我有一个方法(下面的示例)可以创建一个新列表,将一些内容放入其中,然后将其传递给另一个线程进行操作。这似乎是线程安全的。该列表对于创建它的方法是本地的。该方法对列表进行操作,并且在完成对列表的操作之前不会将其传递给另一个线程。但这感觉是错误的,因为列表是在两个单独的线程中访问的,但它不是同步的。这是可接受的线程安全代码吗?classApp{publicstaticvoidmain(String[]args){finalArrayListlist=newArrayList();list.add(4);list.add(5);finalExecutorServicees=Executors

java - 内部锁定、客户端锁定和外部锁定之间的区别?

内部锁定、客户端锁定和外部锁定的黑白区别是什么?创建线程安全类的最佳方法是什么?首选哪种锁定方式?为什么? 最佳答案 我强烈建议您阅读BrianGoetz的“JavaConcurrencyInPractice”。这是一本很棒的书,可以帮助您理解有关并发的所有概念!关于你的问题,我不确定我是否能全部回答,但我可以试一试。大多数时候,如果问题是“什么是最好的锁定方式”等,答案总是取决于您尝试解决的问题。问题1:你在这里尝试比较的东西并不完全可以比较;Java提供了一种内置的锁定机制,synchronizedblock。为了同步的目的,每

java - 关键字 final 对 JVM 有什么影响吗?

这个问题在这里已经有了答案:DoesuseoffinalkeywordinJavaimprovetheperformance?(14个答案)关闭7年前。现在,我最近遇到了一条建议,建议您应尽可能广泛地使用关键字final。这很好,可以防止程序员开枪打自己的腿——也就是说,重新分配不应重新分配的变量。但是,它还有其他目的吗?也就是说,JVM能否使用有关最终变量的信息以某种方式优化字节码,使其运行得更快(构建更好的流水线或在多线程环境中使用它)?或者只是一种语法糖,可以最大限度地减少代码开发过程中出错的可能性?

java - 什么是java信号调度线程?

我正在查看java进程的线程转储,并注意到一些线程被信号调度程序阻塞。什么是信号调度器?它有什么作用? 最佳答案 我在IBMdeveloperWorks上找到了一篇关于此的文章。当操作系统向JVM发出信号时,信号调度线程会将信号传递给适当的处理程序RevelationsonJavasignalhandlingandtermination作者:ChrisWhite,IBM软件工程师 关于java-什么是java信号调度线程?,我们在StackOverflow上找到一个类似的问题:

java - Java中有线程组局部变量吗?

我正在寻找一个类似于ThreadLocal的类,它可以在线程组而不是线程上工作。如果没有这样的类(在某些开源库中),您将如何实现它?有比在WeakHashMap中使用线程组更好的主意吗?我正在使用全局、每线程和每线程组上下文中的各种参数实现一个在运行时可调的调试框架。作为一个非常简单的例子,你可以有一个报告声明:debug.log(category,message);并指定只有当服务于网络请求的线程组中的线程调用时,才会显示具有该特定类别的日志条目。 最佳答案 ThreadGroup很少使用,所以没有平台支持。使用[Weak/Ide

java - 如何在一个类中处理多个线程?

线程通常以两种方式设计(seejavatutorials):通过扩展Thread类或通过实现Runnable类。无论哪种方式,您都需要指定将在线程内运行的内容。我设计了一个类,一个针对在线资源的适配器,用于检索不同类型的信息。此类由getInformationOfTypeA()和getInformationOfTypeB()等方法组成。两者都包含连接到在线资源的代码,因此都需要线程化以避免死锁。问题是:我应该如何设计这个?我可以像下面那样做,但是我只能实现一种方法:publicclassOnlineResourceAdapterimplementsRunnable{publicvoid

java - 为什么人们在事件队列上运行 Java GUI

在Java中,要创建并显示一个新的JFrame,我只需这样做:publicstaticvoidmain(String[]args){newMyCustomFrameClass().setVisible(true);}但是,我看到很多人是这样操作的:publicstaticvoidmain(String[]args){EventQueue.invokeLater(newRunnable(){publicvoidrun(){newMyCustomFrameClass().setVisible(true);}});}为什么?有什么优势吗? 最佳答案

java - 如何避免使用 Thread.Sleep

在我下载最新版本的Netbeans之前,我从未考虑过Thread.Sleep的使用。Netbeans现在警告您不要使用Thread.Sleep。因此,我对该主题进行了一些研究,发现有人说您只需要将Thread.Sleep用于调试/测试目的,如果您在任何其他时间使用它,您的代码就会写得不好。所以我的问题是在以下情况下如何避免使用Thread.Sleep。我编写了一个与另一个应用程序交互的服务器应用程序。服务器有两个线程:处理来自套接字的数据并发回其他信息或只是简单的确认。这是主线程。启动套接字线程后,它会进入一个无限期的while循环。在这个while循环中,我检查以确保套接字线程仍然处

java Callable FutureTask Excecuter : How to listen to finished task

我对执行者服务还很陌生。喜欢自己做所有事情,但我认为是时候相信这些服务了。我想通过Executer传递一个Runnable。执行者将其包装在FutureTask中并将其交还给我。现在我调用polldone()方法。但我希望在done()方法返回true时得到通知。有一个get()方法会阻塞直到Runnable完成,但是之后我需要为每个作业添加一个额外的线程,只是为了查看它何时完成.我可以给我的执行者一些额外的Callable以获得任务完成的通知吗?到这里怎么走?我可以在run方法的末尾添加一些代码,但是done()可能仍然是false... 最佳答案

java - 不安全发布并发java

这个问题在这里已经有了答案:Notthread-safeObjectpublishing(7个答案)关闭9年前。Javaconcurrencyinpracticebook已经给出了不安全发布的例子publicclassHolder{privateintn;publicHolder(intn){this.n=n;}publicvoidassertSanity(){if(n!=n)thrownewAssertionError("Thisstatementisfalse.");}}上面的代码看起来是线程安全的。如果n是公共(public)变量,它就不是线程安全的。书上的例子错了吗?