草庐IT

Tread多线程

全部标签

java - Volatile 关键字和线程本地内存

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我对Java中volatile关键字的用法感到困惑。我在互联网上阅读了很多文章,但仍然一无所获。我脑子里有很多问题想问:首先,维基百科和许多博客都说所有volatile变量都存储在所有线程共享的主内存之上的Thread-Local内存中!我有点困惑,它们是指stackmemory吗?我知道每个线程都有自己的堆栈内存,它存储自己的原始文字和对象引用。如果是这

java - 线程池执行器 : how does it reuse threads

我读到ThreadPoolExecutor有线程池,这个池注定要降低创建新线程的成本(至少我是这样理解下面的短语):Whenyousendatasktotheexecutor,ittriestouseapooledthreadfortheexecutionofthistask,toavoidcontiniousspawningofthreads.[Java7ConcurrencyCookbook]但是,据我所知,我们无法在Java中重新启动线程。问题:ThreadPoolExecutor如何避免创建新线程? 最佳答案 这很简单-本质

Java 多线程与 Guava EventBus

我正在使用Guava事件总线。我有一个类似服务器的对象,它应该一直运行,监听要发布到bus的事件。所以在junit测试中(MyObject是被测类),我在自己的线程中创建它来模拟它并防止阻塞:@Testpublicvoidtest(){EventBuseventBus=newEventBus();Threadthread=newThread(){@Overridepublicvoidrun(){logger.debug("Creatingnewthread");MyObjectmyObject=newMyObject(eventBus);}};thread.start();...}一切

java - 以负载均衡方式在 4 个线程上分配 10 个无限作业 (Java)

我有10个计算作业,需要(接近)无限时间。例如:计算PI的下一位,solve一个NP-hard约束满足问题等。我有4个线程(所以在一台有8个内核的机器上有一个有4个线程的线程池,所以我还有一些内核可以避免活锁机器和过程)。使用Java8,如何在这4个线程中分配这10个作业?这是个坏主意:ExecutorServicees=Executors.newFixedThreadPool(4);for(Jobj:jobs){es.submit(j);}因为4个工作将开始,但没有一个完成,所以工作5-10永远不会开始。例如,如果我查看10分钟,我预计每个作业运行了大约4分钟。20分钟后,每个作业运

java - ruby 线程编程,ruby 相当于 java wait/notify/notifyAll

我想知道ruby​​有哪些方法可以替代Java方法:等待通知通知所有人您能否发布一个小片段或一些链接? 最佳答案 你要找的是Thread中的ConditionVariable:require"thread"m=Mutex.newc=ConditionVariable.newt=[]t 关于java-ruby线程编程,ruby相当于javawait/notify/notifyAll,我们在StackOverflow上找到一个类似的问题: https://stac

java对象序列化 - 线程安全?

我正在编写高度并发的应用程序,它广泛修改MyClass的对象。该类由几个字段组成。我的问题是如何防止在另一个线程序列化期间修改特定对象?问候,马特 最佳答案 通过synchronizing序列化和修改对象状态的方法。 关于java对象序列化-线程安全?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4003741/

java - 如何确定硬件线程数

什么是硬件线程。它总是使可用的处理器内核数量增加一倍吗?如何确定IntelCore2Duo处理器中的硬件线程数?能否通过Java代码判断? 最佳答案 Whatismeantbyahardwarethread.你告诉我们。这不是一个真正的既定术语。Isitalwaysdoublethenumberofprocessorcoresavailable?啊,现在你好像在说hyperthreading其中一个CPU核心内的部分冗余被用来“伪造”一个额外的核心。Howtodeterminethenumberofhardwarethreadsin

java - 如何在没有同步方法的情况下从不同的线程安全地刷新缓冲区?

有多个线程,比如B、C和D,每个线程都以高频率将小数据包写入缓冲区。他们拥有自己的缓冲区,没有其他人可以写入它。写作必须尽可能快,我已经确定使用synchronized会使它慢得令人无法接受。缓冲区只是字节数组,以及第一个空闲元素的索引:byte[]buffer;intindex;publicvoidwrite(byte[]data){//somecheckingthatthebufferwon'toverflow...notimportantnowSystem.arraycopy(data,0,buffer,index,data.length);index+=data.length;

java - 当一个线程完成后,如何通知主线程?

我使用FTP原始命令将文件上传到FTP服务器,我在代码中启动了一个新线程通过套接字发送文件。当新启动的线程完成发送文件时,我想向控制台输出一些消息,如何确保线程已完成工作?这是我的代码:TinyFTPClientftp=newTinyFTPClient(host,port,user,pswd);ftp.execute("TYPEA");StringpasvReturn=ftp.execute("PASV");StringpasvHost=TinyFTPClient.parseAddress(pasvReturn);intpasvPort=TinyFTPClient.parsePort(

具有四核处理器的笔记本电脑中的 Java 多线程

我正在阅读Java教程,其中提到实际的多线程不会发生在具有单个处理器的机器中。它提到操作系统为Java进程分配指定的时间量,而JVM线程调度程序选择线程一次运行一个线程一小段时间。我有一台采用四核处理器的笔记本电脑-是否可以通过在每个内核中运行一个线程来以编程方式更快地运行多线程程序?之所以问这个问题,是因为书中提到只有真正的多处理器系统才能同时做多件事。 最佳答案 即使是单个CPU也可以在松散意义上“同时做多件事”,但它们并不是真正意义上的并行。您可以启动100个线程在单个内核上运行,它们将获得时间片,在此期间每个线程都可以运行几