草庐IT

【JavaEE】线程池

全部标签

java - Java 线程优先级如何转换为操作系统线程优先级?

JavaAPI线程优先级(1-10)如何转换为操作系统级优先级,因为大多数操作系统没有与之匹配的线程优先级(以数字表示)。因此请记住,是否存在两个或多个具有不同优先级的线程最终在操作系统级别获得相同优先级的情况。请澄清,如果我的理解有一些更正。 最佳答案 确实,某些优先级可以映射到相同的“native”优先级。这是列表(基于OpenJDK6中的Hotspot代码):太阳系1⇒02⇒323⇒644⇒965–10⇒127值得注意的是,在Solaris上,您不能将线程优先级提高到正常以上,只能降低它:5的优先级值与任何更高的值相同。Lin

java - java.net.Socket 线程安全的方式是什么?

我有一个Socket,我正在通过BufferedReaders和BufferedWriters读取和写入。我不确定可以从单独的线程执行哪些操作。我猜想同时从两个不同的线程写入套接字是个坏主意。与同时从两个不同线程读取套接字相同。在一个线程上阅读而在另一个线程上写入怎么样?我问是因为我想让一个线程在等待更多数据时长时间阻塞读取,但在等待期间我也偶尔有数据要在套接字上发送。我不清楚这是否是线程安全的,或者我是否应该在写入之前取消读取(这会很烦人)。 最佳答案 套接字在流级别是线程不安全的。您必须提供同步。唯一的保证是无论并发性如何,您都

java - 用于处理并发用户的多线程 GAE servlet

我想对我的GAEservlet进行多线程处理,以便同一个实例上的同一个servlet可以处理多达10个(在前端实例上,我相信最大线程数是10)来自不同的并发请求用户在同一时间,他们每个人之间的时间片。publicclassMyServletimplementsHttpServlet{privateExecutorexecutor;@OverridepublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse){if(executor==null){ThreadFactorythreadFactory=Thre

java - 线程何时超出范围?

我编写了一个程序来计算文本中的行数、单词数和字符数:它使用线程来执行此操作。有时效果很好,但其他时候效果不佳。最终发生的是指向所计数的单词和字符数的变量有时会不足,有时不会。在我看来,线程有时在它们可以计算出它们想要的所有单词或字符之前就结束了。是因为当while(true)循环中断时这些线程超出了范围吗?我在下面包含了我的问题的线程部分的代码:privatevoidcountText(){try{reader=newBufferedReader(newFileReader("this.txt"));while(true){finalStringline=reader.readLine

Java多线程初学者问题

我正在开发一个科学应用程序,它具有可以并行进行的易于分离的部分。因此,我将这些部分作为独立线程编写到每个运行中,尽管这似乎不是将事物分离到线程中的标准原因(即,不阻止某些退出命令等)。几个问题:这真的能在标准多核台式机上给我带来任何好处吗?也就是说,如果我有当前的JVM,线程实际上会在单独的内核上运行吗?还是我必须做其他事情?我几乎没有被所有线程读取(尽管从未写入)的对象。潜在的问题?那些问题的解决方案?对于实际的集群,您能否推荐将线程分配到各个节点的框架,这样我就不必自己管理(好吧,如果存在的话)?澄清:我的意思是,要么自动将线程转换为单个节点的任务,要么使整个集群看起来像一个JVM

常见的socket函数封装和多进程和多线程实现服务器并发

常见的socket函数封装和多进程和多线程实现服务器并发1.常见的socket函数封装2.多进程和多线程实现服务器的并发2.1多进程服务器2.2多线程服务器2.3运行效果1.常见的socket函数封装accept函数或者read函数是阻塞函数,会被信号打断,我们不能让它停止,所以我们应该进行一些封装操作。//wrap.h#ifndef__WRAP_H_#define__WRAP_H_#include#include#include#include#include#include#include#includevoidperr_exit(constchar*s);intAccept(intfd,

java - 当我在四核机器上使用多线程时,为什么这段代码看不到任何显着的性能提升?

我写了一些Java代码来学习更多关于Executor框架的知识。具体来说,我编写了代码来验证CollatzHypothesis-这表示如果您将以下函数迭代应用于任何整数,您最终会得到1:f(n)=((n%2)==0)?n/2:3*n+1CH仍未得到证实,我认为这是了解Executor的好方法。每个线程都分配了一个整数范围[l,u]来检查。具体来说,我的程序有3个参数-N(我要检查CH的数字)、RANGESIZE(线程必须处理的间隔的长度)和NTHREAD,线程池的大小。我的代码运行良好,但我看到的加速比我预期的要少得多——当我从1个线程变为4个线程时,加速大约为30%。我的逻辑是计算完

java - Java 中线程中的线程?

我目前正在考虑如何用Java设计一个多线程系统,需要做一些繁重的网络处理和数据库存储。该程序首先会启动三个基本线程。沿着这些基本线程,我想不是从主程序而是从两个线程启动其他线程。一个线程是否有可能启动另一个线程导致某种层次结构,例如:>Parent->t0thread1->t1tread1.1>->t0thread2>->t0thread3->t2thread3.1t0=initaltimet1,t2=timeatapointintherunningthreadt1!=t2如果不能,有人可以提供带有引用的理论解决方案吗? 最佳答案

java - 如何杀死处于 RUNNING 状态的 Java 线程?

有可能以非编程方式杀死处于RUNNING状态的线程吗?我知道*nix中的top命令可以显示线程。我可以终止操作系统中的线程吗?我想知道是否有一种方法可以将一个线程链接到一个进程,这样我就可以只终止那个特定的线程而不是应用程序。我们的代码中有一个错误,该错误使同步方法中的线程处于RUNNING状态。线程保持对“挂起”应用程序的对象的锁。错误已修复。但我想知道是否可能。 最佳答案 简短的回答是“也许,但你不应该,而且大多数时候它也不会起作用”。长答案是:“也许……”一些JVM实现将java线程映射到OS线程,而另一些则不。如果JVM映射

java - 如何测量线程堆栈深度?

我有一个具有可扩展性问题的32位Java服务:由于用户数过多,我们会因为线程数过多而耗尽内存。从长远来看,我计划切换到64位并降低每用户线程的比率。在短期内,我想减少堆栈大小(-Xss,-XX:ThreadStackSize)以获得更多的空间。但这是有风险的,因为如果我把它弄得太小,我就会得到StackOverflowErrors。如何测量应用程序的平均和最大堆栈大小以指导我决定最佳-Xss值?我对两种可能的方法感兴趣:在集成测试期间测量正在运行的JVM。哪些分析工具会报告最大堆栈深度?寻找深层调用层次结构的应用程序的静态分析。依赖注入(inject)中的反射使得这不太可能奏效。更新: