我正在尝试实现一个线程,该线程在后台通过套接字(套接字和发送都没有问题)不断发送数据(在我的情况下,是从主线程发送BufferedImage),而该数据仍可以由主线程。
我知道我可以编写一个实现Runnable的自定义线程,重写其run()方法并从主线程启动该线程的新实例,但是我不知道如何解析数据或从中访问数据自定义线程,同时仍然可以在主线程中对其进行编辑。
我该怎么做?还是有更好的方法?
答案 0 :(得分:0)
您可以将一个成员变量添加到实现Runnable
的类中,并将其设置为构造过程中来自主线程的数据。正如其他人所说,您也可以将数据设为public static volatile
变量。请确保仔细计划逻辑,因为接触同一数据的多个线程可能会变得混乱。我建议查找同步和锁定。
无论如何,这是一个基本示例:
public class MainThread {
public static void main(String[] args) throws InterruptedException {
YourData yourData = new YourData();
new Thread(new BackThread(yourData)).start();
Thread.sleep(5000);
//set to 5 in background thread
System.out.println(yourData.i);
yourData.i += 1;
//set to 6 in this thread
System.out.println(yourData.i);
}
}
public class YourData {
public int i = 0;
}
public class BackThread implements Runnable {
private YourData data;
public BackThread(YourData data) {
this.data = data;
}
@Override
public void run() {
data.i += 5;
}
}
您还可以使主线程类实现Runnable,在这种情况下,您将可以访问主线程中的数据对象以及执行run
方法的线程。