java创建Thread线程,里面的值怎么返回让其他程序读取?

简单的线程实例如下

package mythread;
public class Mythread extends Thread{
    private String value1;

    public void run(){
      value1 = "str1";
    }
}

例如我在另外一个swt界面程序,点击一下button,怎么获取前面线程的value1的值?

public void mouseDown(MouseEvent e) {
    MyThread thread = new MyThread();
    thread.start();
    System.out.println("value1:"+thread.value1); //获取不到value1值
}   

这样获取不到value1的值。。

这个应该不是定义变量的问题,应该是因为多线程的问题,在主线程打印thread对象中value1变量的时候,在子线程thread1中还没有执行run方法给value1进行赋值,
应该是这个问题。
有几种解决方案:
1. 让主线程睡眠一小会
Thread.sleep(500)
2. 让子线程先执行,等子线程执行完再继续执行主线程(推荐)

        public void mouseDown(MouseEvent e) {
            MyThread thread = new MyThread();
            thread.start();
            thread.join();   // 加入这一行
            System.out.println("value1:"+thread.value1);
     }   

3.使用wait()和notify() 来等待和唤醒线程

定义一个全局变量就可以哒。

你的value1定义是private,改为public或者提供一个get方法。

package mythread;
public class Mythread extends Thread{
    private String value1;

    public void run(){
      value1 = "str1";
    }
        //增加一个get方法
        public String getVaule(){
          return value1;
        }
}

public void mouseDown(MouseEvent e) {
    MyThread thread = new MyThread();
    thread.start();
    System.out.println("value1:"+thread.getVaule());
}   

1、在数据库里建临时表,线程这边存,用的地方查
2、使用redis缓存,线程这边以键值对的形式存,用的地方用key取;

原因:
1. 工作线程Mythread 不能直接更新界面。
2. 工作线程Mythread 执行可能在主线程下一行代码执行之前或之后,所以thread.getValue()可能会没值,因为多线程还没执行赋值操作。

解决办法:
1. SWT界面里用以下执行多线程并更新界面.

Display.getCurrent().asyncExec(new Runnable() {
 public void run() {
  Button butt = new Button(panel,SWT.PUSH);
  butt.setText("Push");
 }
}); 

用callable实现吧?必须Thread吗?