class A implements Runnable { private int[] arr = new int[3]; public void run() {
arr[0] = 4;
arr[1] = 5;
arr[2] = 6;
} public int[] getArr() {
return arr;
}
public void setArr(int[] arr) {
this.arr = arr;
}
}public class Main {
public static void main(String args[]) {
A a = new A(); int[] arr = { 0, 3, 8 };
a.setArr(arr);
Thread t = new Thread(a);
t.start(); int[] b = a.getArr();
for (int i = 0; i < b.length; i++)
System.out.println(b[i]);
}
}
/*
 * 我这题的主要意思是arr作为A类对象线程和主线程的共享变量,当arr在A对象里面被改变时,主线程只能等待,不准去获取arr,
 * 只有run()方法执行完后,才能去读取arr,然后输出。
 * 不知该如何设置?
 */

解决方案 »

  1.   

    把run()中方法放到一个A类sycronized方法里,run()调用该方法
      

  2.   

     synchronized 方法(){}
      

  3.   

    class A implements Runnable {    private int[] arr = new int[3];
        Object sycroniz;    public synchronized void run() {
            arr[0] = 4;
            arr[1] = 5;
            arr[2] = 6;
            notify();
        }    public synchronized int[] getArr() throws Exception {
            wait();
            return arr;
        }    public void setArr(int[] arr) {
            this.arr = arr;
        }
    }public class Main {    public static void main(String args[]) throws Exception {
            A a = new A();
            int[] arr = {0, 3, 8};
            a.setArr(arr);
            Thread t = new Thread(a);
            t.start();
            int[] b = a.getArr();
            for (int i = 0; i < b.length; i++) {
                System.out.println(b[i]);
            }
        }
    }
      

  4.   

    class A implements Runnable {    private int[] arr = new int[3];
        Object sycroniz;    public synchronized void run() {
            arr[0] = 4;
            arr[1] = 5;
            arr[2] = 6;
            notify();
        }    public synchronized int[] getArr() throws Exception {
            wait();
            return arr;
        }    public void setArr(int[] arr) {
            this.arr = arr;
        }
    }public class Main {    public static void main(String args[]) throws Exception {
            A a = new A();
            int[] arr = {0, 3, 8};
            a.setArr(arr);
            Thread t = new Thread(a);
            t.start();
            int[] b = a.getArr();
            for (int i = 0; i < b.length; i++) {
                System.out.println(b[i]);
            }
        }
    }