Tag:

MulticastSocket构造函数和绑定到端口或SocketAddress

我可能对绑定这个术语有一个基本的误解,但我对MulticastSocket及其构造函数的使用感到困惑。 他们不会做我理解他们应该做的事应该这样做,任何能帮助我清除我的误解的人都会受到赞赏。 首先是我想要实现的目标。 我试图编写一个简短的程序,创建一个MulticastSocket绑定它(即监听)在特定的网络适配器上 ,然后加入一个特定的多播组。 我已经尝试了以下(客户端)代码,该代码工作正常,我可以在没有多播套接字超时的情况下组播数据包。 public class Main { public static final int DEFAULT_MULTICAST_PORT = 5555; public static final String multicastGroup = “225.4.5.6”; public static final String adapterName = “eth0”; public static final int MAX_PACKET_SIZE = 65507; CharBuffer charBuffer = null; Charset charset = Charset.defaultCharset(); CharsetDecoder decoder = charset.newDecoder(); static ByteBuffer message = ByteBuffer.allocateDirect(MAX_PACKET_SIZE); […]

为什么interrupt()没有按预期工作,它是如何工作的

我想中断一个线程,但调用interrupt()似乎不起作用,下面是示例代码: public class BasicThreadrRunner { public static void main(String[] args) { Thread t1 = new Thread(new Basic(), “thread1”); t1.start(); Thread t3 = new Thread(new Basic(), “thread3”); Thread t4 = new Thread(new Basic(), “thread4”); t3.start(); t1.interrupt(); t4.start(); } } class Basic implements Runnable{ public void run(){ while(true) { System.out.println(Thread.currentThread().getName()); try { Thread.sleep(1000); } catch (InterruptedException e) […]

Java先发制人吗?

我已经看到了很多这个问题的答案,但我仍然不确定。 其中之一是“Java是先发制人”。 (JVM使用抢占式,基于优先级的调度算法(通常是循环算法)进行调度。 第二个是如果2个具有相同优先级的线程运行Java将不会抢占,并且一个线程可能会饿死。 所以现在我编写了一个程序来检查它,我创建了10个具有最小优先级的线程,然后是10个具有最高优先级的线程,结果是我在所有线程之间跳转 – 这意味着即使两个线程具有相同的线程,Java也是抢先的优先 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javaapplication1; import java.util.logging.Level; import java.util.logging.Logger; /** * * @ */ public class JavaApplication1 { /** * @param args the command line arguments */ public static void main(String[] args) […]

如何从java运行multithreadingjython脚本?

我正在构建一个Java框架,它将监听事件,然后在Jython中处理它们。 不同的事件类型将被发送到不同的脚本。 由于在调用PythonInterpreter.exec()时jython需要相当长的时间来编译脚本,因此我必须预编译脚本。 我是按照以下方式做的: // initialize the script as string (would load it from file in final version) String script = “print ‘foo'”; // get the compiled code object PyCode compiled = org.python.core.__builtin__.compile( script, “”, “exec” ); PyCode编译对象将被推送到存储库并在事件进入时使用 PythonInterpreter pi = new PythonInterpreter(); pi.set( “variable_1”, “value_1”); pi.set( “variable_x”, “value_x”); pi.exec( compiled ); 现在,对于我的难题 – 可能会发生某些类型的多个事件同时发生 […]

静态变量的线程安全性

class ABC implements Runnable { private static int a; private static int b; public void run() { } } 我有一个如上所述的Java类。 我有这个类的多个线程。 在run()方法中,变量a和b每次递增几次。 在每个增量上,我将这些变量放在Hashtable中。 因此,每个线程都会增加两个变量并将它们放在Hashtable中。 如何使这些操作线程安全?

停止非循环Java线程

这可能是我误解我所读到的内容的一个例子,但是用Java杀死一个线程的所有例子似乎表明你必须发出一个线程来自杀; 没有一些严重的风险,你不能从外面杀死它。 问题是,所有关于如何“礼貌地”要求线程死亡的例子都有某种循环,所以你要做的就是在每次迭代时都看一个标志。 所以,我得到的是一个线程,它只需要一段时间(一系列SQL查询)。 我当然可以在每一步之后进行检查,但它们不是在一个循环中,并且我没有一种非常优雅的方式可以解决这个问题。 这是我正在做的一个例子: new Thread(new Runnable(){ public void run(){ //query 1 Connection conn = db.getConnection(); Statement s = conn.createStatement(); ResultSet rs = s.executeQuery(“SELECT …”); while(rs.next()){ //do stuff } //query 2 rs = s.executeQuery(“SELECT …”); while(rs.next()){ //do stuff } //query 3 rs = s.executeQuery(“SELECT …”); while(rs.next()){ //do stuff } } }).start(); 这是一个例子,我不使用匿名内部类,但它说明我的run()方法不能优雅地停止自己。 此外,即使我在每个步骤之后检查,如果特定查询需要很长时间才能运行,则此代码将无法在查询完成之后停止。 […]

什么是线程转储中的“锁定可拥有的同步器”?

我试图了解Locked ownable synchronizers在线程转储中引用了什么? 我开始使用ReentrantReadWriteLock有一个处于WAITING状态的线程,等待处于WAITING状态的另一个线程的“锁定的可拥有同步器”列表中的ReentrantReadWriteLock$FairSync (一个ThreadPoolExecutor )。 我找不到太多关于此的信息。 是某种锁“传递”到线程? 我试图弄清楚我的死锁来自哪里,我看不到任何线程主动锁定那些(即没有相应的- locked 在任何堆栈跟踪中- locked )。

线程安全框架

以下类不是线程安全的( certificate以下代码不是线程安全的certificate ) 是否有一个框架可以帮助编译时/运行时分析并告诉我们以下是不是线程安全的? 对于编译时间,理想情况下在Eclipse中出现了摇摆下划线并告诉我们该类不是线程安全的? 对于运行时,任何静态代码分析是否会将该类捕获为非线程安全的? public class LazyInitRace { private ExpensiveObject instance = null; public ExpensiveObject getInstance() { if (instance == null) instance = new ExpensiveObject(); return instance; } }

Thread.join和Synchronized有什么区别?

我很困惑何时使用Thread.join()以及何时在multithreading应用程序中使用synchronization 。 根据我的说法,他们都阻止或等待执行由其他一些线程完成。 这个例子必须依次按顺序模式输出10 A,10 B和10 C: 1 : A 2 : A 3 : A 4 : A 5 : A 6 : A 7 : A 8 : A 9 : A 10 : A 1 : B 2 : B 3 : B 4 : B 5 : B 6 : B […]

不能访问封闭的类型实例。

整个代码是: public class ThreadLocalTest { ThreadLocal globalint = new ThreadLocal(){ @Override protected Integer initialValue() { return new Integer(0); } }; public class MyThread implements Runnable{ Integer myi; ThreadLocalTest mytest; public MyThread(Integer i, ThreadLocalTest test) { myi = i; mytest = test; } @Override public void run() { System.out.println(“I am thread:” + myi); Integer myint = […]