Tag: multithreading

多个套接字导致ConnectException:连接被拒绝:连接

我在Windows XP上用Eclipse编程java。 我有一个多进程模拟,它使用ProcessBuilder来运行服务器和两个客户端。 服务器启动一个线程来侦听两个不同的套接字 – 每个客户端一个。 我可以为每个客户注释掉代码,让其他工作完全正常。 当我尝试同时运行它们时,一个客户端将始终使用ConnectException错误:连接被拒绝:连接。 它似乎是哪个客户端运行速度较慢,但​​很难说。 我可以在启动服务器之后但在客户端之前暂停,netstatvalidation两个套接字都处于活动状态。 可能是什么导致了这个? 我在下面有一些简化的代码。 更新:根据评论,我编辑了代码以在单个套接字上multithreading服务器,但我仍然遇到同样的问题。 下面的代码反映了这些变化。 看来套接字是由一个客户端打开和关闭,然后另一个客户端有机会打开它。 我可以在每个客户端的末尾抛出暂停语句,允许另一个完成,但这是一个修复,而不是解决方案。 所以现在真正的问题是,在指示它关闭之前,如何保持ServerSocket的监听? 服务器 try{ server = new ServerSocket(sockNum); } catch (IOException e) { System.out.printf(“Could not listen on port %d\n”,sockNum); System.exit(-1); } while(true){ ClientWorker w; try{ Socket connection = server.accept(); w = new ClientWorker(connection); Thread t = new Thread(w); t.start(); } […]

Java:如何使用JNI函数停止调用一系列C ++函数的Thread?

所以,这是我的情况: 我有一个Java应用程序,它使用来自“JavaToCpp”类的JNI方法将数据数组发送到C ++ DLL。 一旦C ++ DLL收到了所有数据,它就开始对它执行几个操作。 我正在使用新线程运行“JavaToCpp”类,因为我的Java接口在(长)(C ++)过程/子例程期间不会被冻结。 我实现了两个方法来停止工作(C ++)过程/子例程: 第一个“STOP”:正在创建一个将由C ++ DLL读取的文件,以便它可以干净地停止正在运行的过程/子例程。 第二个“KILL”:应该直接关闭/终止正在运行的C ++过程/子程序 问题是,在寻找一段时间之后,我没有找到任何好的技巧来实现它。 因此,如果有人知道如何在程序/子程序运行时杀死一个线程……

使用AtomicInteger作为静态共享计数器

为了通过Java了解同步,我只是搞乱一些简单的事情,比如创建线程之间共享的计数器。 我遇到的问题是我无法弄清楚如何在100%的时间内顺序打印计数器。 int counterValue = this.counter.incrementAndGet(); System.out.println(this.threadName + “: ” + counterValue); 上面增加AtomicInteger counter ,获取新值,并将其打印到由负责该更新的线程名称标识的控制台。 当看起来incrementAndGet()方法在打印当前线程的更新值之前导致JVM上下文切换到另一个线程以进行更新时,会出现问题。 这意味着在线程返回执行状态之前,该值会增加但不会打印。 在查看此示例输出时,这很明显: Thread 3: 4034 Thread 3: 4035 Thread 3: 4036 Thread 1: 3944 Thread 1: 4037 Thread 1: 4039 Thread 1: 4040 Thread 2: 3863 Thread 1: 4041 Thread 1: 4043 您可以看到,当执行返回到线程1时,它会打印其值并继续更新。 线程2也是如此。 我有一种感觉,我错过了一些非常明显的东西。

重新排序volatile字段周围的正常字段

基于 挥发性有什么作用? http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#incorrectlySync 和 易变的新保证 http://www.ibm.com/developerworks/library/j-jtp03304/ class VolatileExample { int x = 0; volatile boolean v = false; public void writer() { x = 42; v = true; } public void reader() { if (v == true) { //uses x – guaranteed to see 42. } } } 看起来。 1a) write to non-volatile variable x […]

Java:线程顺序

下面的代码发现输出结果不是顺序,不是从小到大,如何保证它是从小到大的顺序? java代码 public class TestSync { /** * @param args */ public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread(new Thread1()).start(); } } public int getNum(int i) { synchronized (this) { i++; } return i; } static class Thread1 implements Runnable { static Integer value = […]

从Androidfunction更新Textview

有人可以告诉我如何从function更新控件Textview Android? 我已深入搜索互联网并看到许多人提出同样的问题,我测试了线程但无法工作,有人有一个简单的工作示例吗? 例如,调用一个函数(在循环中运行几次)并且函数在TextView中写入,但问题是在函数未完成运行之前,它会向我显示文本。 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); while(condition) //here freezes the UI and the text in textview only shows when the loop ends { HardWork(); } } public void HardWork() { txtProgreso.append(“Test Line” + “\n\n”); }; 提前致谢。

等待递归的Thread-Producer

我有一个收集者,在游戏中搜索动作。 我在一个递归搜索中搜索,以从游戏中获得所有可能的移动。 出于性能原因,我使用了一个Threadpool,并且每个找到的移动都会向池中添加一个新的Thread,以延长旧的移动。 这是一些代码: protected static List threads; private static ExecutorService threadPool; protected final synchronized void hookThread(Runnable thread) { if (threadPool == null) { threadPool = Executors.newFixedThreadPool(15); threads = new ArrayList(); } threadPool.execute(thread); threads.add(thread); } protected abstract class GathererRunnable implements Runnable { @Override public final void run() { onRun(); threads.remove(this); } public abstract void onRun(); […]

在Java中使用线程进行并行编程

随着Join/Fork framework的出现,Java中只能从Java 7进行并行编程。 让我们说在Java中,使用ExecutorService我创建一个4线程的线程池并提交给它说10个任务,这意味着4个线程将开始执行4个任务,其他6个任务将由线程获取,当任何线程完成其任务。 假设我有一个具有4个内核的四核处理器,我知道一个线程可以在一个内核上运行(这里不采用超线程概念)所以我的所有4个线程并行工作,1个内核运行1个线程? 这不是一个并行编程吗? 编辑: 读取源 – 这是Java 8播放列表,在第1章中提到可以从Java 7开始实现并行编程。

final static vs non-final静态变量?

有没有人知道这两种方法的不同之处? public class SingleTone { private static final instance = new SingleTone(); private SingleTone() { } public [static] SingleTone getinstance() { return instance; } } 和 public class SingleTone { private static instance = new SingleTone(); private SingleTone() { } public [static] SingleTone getinstance() { return instance; } } 我知道最终的静态变量是线程安全的但是我找不到非最终的变量。 (注意:我正在寻找最终静态变量与非最终静态变量的差异,所以请不要建议如何实现Singleton设计模式。我知道有一种Enum方法。) 编辑:我错过了方法上的静态关键字现在已修复!

在执行程序服务中实现线程超时

所以现在我有一个相当基本的Executor服务,用于将我的程序分解为线程,如下所示: ExecutorService threadPool = Executors.newFixedThreadPool(12); for (int i = 0; i < objectArray.length; i++) { threadPool.submit(new ThreadHandler(objectArray[i], i)); // The i is used elsewhere } 我想知道是否有一种检测/关闭“崩溃”或“冻结”线程的好方法? 我看了一下文档,但它似乎并不适合我如何使用它… 有人可以帮我弄这个吗? 谢谢