Java从主线程和自定义线程同时访问数据

时间:2019-01-31 19:19:08

标签: java multithreading

我正在尝试实现一个线程,该线程在后台通过套接字(套接字和发送都没有问题)不断发送数据(在我的情况下,是从主线程发送BufferedImage),而该数据仍可以由主线程。

我知道我可以编写一个实现Runnable的自定义线程,重写其run()方法并从主线程启动该线程的新实例,但是我不知道如何解析数据或从中访问数据自定义线程,同时仍然可以在主线程中对其进行编辑。

我该怎么做?还是有更好的方法?

1 个答案:

答案 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方法的线程。