我想知道一个典型的while(true)
ServerSocket监听循环是否需要整个核心等待并接受客户端连接(即使实现runnable和使用Thread .start()
)
我正在实现一种分布式计算集群,每台计算机都需要它拥有的每个核心用于计算.主节点需要与这些计算机通信(调用修改算法功能的静态方法).
我需要使用套接字的原因是跨平台/跨语言功能.在某些情况下,PHP将调用这些java静态方法.
我使用了一个java profiler(YourKit),我可以看到我正在运行的ServerSocket监听线程,它永远不会睡觉而且它总是在运行.有没有更好的方法来做我想要的?或者,性能影响是否可以忽略不计?
如果你能想到一个更好的方法,请随时提供任何建议(我已尝试过RMI,但不支持跨语言.
感谢大家
我想知道这是否是最好的方法.我有大约500个无限期运行的线程,但Thread.sleep在完成一个处理周期后会持续一分钟.
ExecutorService es = Executors.newFixedThreadPool(list.size()+1);
for (int i = 0; i < list.size(); i++) {
es.execute(coreAppVector.elementAt(i)); //coreAppVector is a vector of extends thread objects
}
Run Code Online (Sandbox Code Playgroud)
正在执行的代码非常简单,基本上就是这样
class aThread extends Thread {
public void run(){
while(true){
Thread.sleep(ONE_MINUTE);
//Lots of computation every minute
}
}
}
Run Code Online (Sandbox Code Playgroud)
我确实需要为每个正在运行的任务使用单独的线程,因此不能选择更改体系结构.我尝试使我的threadPool大小等于Runtime.getRuntime().availableProcessors(),它试图运行所有500个线程,但只允许8(4xhyperthreading)执行.其他线程不会投降,让其他线程轮到他们.我尝试输入wait()并通知(),但仍然没有运气.如果有人有一个简单的例子或一些提示,我将不胜感激!
嗯,设计可以说是有缺陷的.线程实现了遗传编程或GP,一种学习算法.每个线程分析高级趋势进行预测.如果线程完成,则学习将丢失.也就是说,我希望sleep()允许我分享一些资源,而一个线程不是"学习"
所以实际要求是
如何安排维护状态并每2分钟运行一次的任务,但是控制一次执行多少次.
作为跨平台文本编辑器Sublime Text 2的粉丝,我一直在研究它是如何开发的.开发人员已经注意到它有一些99%的c ++与一些GTK for linux并且它使用他称之为"Sublime GUI"的自定义UI工具包.这是dev的引用
Sublime Text 2本身使用自定义UI工具包.有很多应用程序可能没有意义,但对于Sublime Text来说,这不是一个不合理的选择,我总是知道很多UI控件都必须是自定义的,无论工具包如何(例如,文本控件和选项卡控件).UI工具包位于跨平台抽象层之上,它更像是平台功能的联合而不是最低的共同标准.
我的问题是,跨平台抽象层有哪些选择?我认为这比GTK,QT,SDL低.我试图弄清楚如何创建一个跨平台的自定义UI工具包,只需要编写一次代码.
我很欣赏UI工具包的好处,但是如果我想弄清楚并且在Windows,Linux,Mac上支持我的应用程序,我不知道从哪里开始.
我一直在读,在一个从未实例化的类中使用静态变量是一个坏主意,因为当类不再存在于内存中时,变量可能会变为null.说得通.
这就是我一直在做的一个例子
public class MasterParameters {
public static boolean DEBUG_MODE = true;
protected MasterParameters(){
// Exists only to defeat instantiation.
}
Run Code Online (Sandbox Code Playgroud)
}
我也听说使用Singleton同样糟糕,人们建议使用"依赖注入" - 但这对于我需要的东西来说似乎很复杂和过度.我只是不看正确的例子吗?
我想要一个简单的方法在一个位置定义一个变量,可以从我的代码中的任何地方访问,而不必传递参数对象.你有什么建议?谢谢 :)
我有一个非常复杂的系统(100多个线程)需要发送电子邮件而不会阻塞.我对这个问题的解决方案是实现一个名为的类EmailQueueSender
,它在执行开始时启动,并且ScheduledExecutorService
每隔500毫秒查看一个内部队列,如果size()> 0则清空它.
在这种情况下,有一个同步的静态方法addEmailToQueue(String[])
,它接受一个包含body的主题,subject..etc作为一个数组.系统确实有效,我的其他线程可以继续将他们的电子邮件添加到队列中而不会阻塞,甚至担心电子邮件是否成功发送...它似乎有点乱......或者说是hackish ...每个程序员当他们知道自己做错了什么或者有更好的方法时,会在胃里感受到这种感觉.也就是说,有人可以打我的手腕,并提出一个更有效的方法来实现这一目标吗?
谢谢!
似乎没有关于黑莓推送技术的大量信息.我唯一希望实现的是在黑莓设备可用时向黑莓设备发送通知.我真的需要TomCat和MySQL吗?我的java程序不是servlet,对于我使用PHP并通过套接字与java通信的东西.
我正在使用java,如果有人知道一些例子,那就太好了.
我有一个奇怪的程序,GzipInputStream零填充缓冲区的一部分.我有幸知道流中的字节应该是什么样的,我可以看到缓冲区正在填充8个正确的字节和12个零(不应该为零)
BYTES应该看起来像这样----> 0 20 82 22 -91 27 -96 65 66 65 88 32 32 32 32 81 32 0 0 0 100 78
BYTES实际上看起来像这样---> 0 20 82 22 -91 27 -96 65 66 65 0 0 0 0 0 0 0 0 0 0 0 0
前两个字节表示一个整数,用于确定前两个字节之后的可变长度(以字节为单位)的大小.所以在这个例子中,第一个字节是0 20,而在BIG_ENDIAN中,这给我们后续的有效载荷大小为20个字节.
这是我的阅读代码
gzipInputStream = new GZIPInputStream(url.openStream());
byte[] payload = new byte[2];
gzipInputStream.read(payload);
for(int i=0;i<payload.length;i++){
System.out.println(payload[i]);
}
int payloadSize = ((payload[0] & 0xFF) << 8) | ((payload[1]) & 0xFF);
//read the next payloadSize …
Run Code Online (Sandbox Code Playgroud) java ×6
binary ×1
blackberry ×1
c++ ×1
core ×1
inputstream ×1
performance ×1
push ×1
qt ×1
queue ×1
sockets ×1
sublimetext2 ×1
threadpool ×1