Java线程问题,同步执行的问题。

比如有3个方法A,B,C。AB2个方法同步执行,AB2个方法必须执行完毕后才能执行C方法,
怎么做啊?

同事new三个线程,同时执行,AB两个线程可以修改C线程顶一个的2个pulic的静态变量,当修改之后,也就是表示AB都执行完成,就不执行了,之后在执行c线程的时候加上一个判断AB修改的变量值是否是代表他们已经执行完了的值,如果是,就执行c,反之跳出,执行完了c之后,又可以把AB变量改成初始值,之后又可以重复执行了。

你开三个子线程,前两个先执行,它俩任意一个执行完都给主线程发个消息。当前两个都执行,主线程再开启第三个子线程执行。
private boolean flag1;
private boolean flag2;
private Thread3 thread3;
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1:
flag1 = (boolean)msg.obj;
if(flag1 && flag2)
thread3.start();
break;
case 2:
flag2 = (boolean)msg.obj;
if(flag1 && flag2)
thread3.start();
break;
default:
break;
}
}
};
private class Thread1 extends Thread{
@Override
public void run() {
super.run();
Log.e("1234", "Thread1开始执行");
SystemClock.sleep(1000);//模拟Thread1在执行
Log.e("1234", "Thread1执行完毕");
Message msg = Message.obtain();
msg.what = 1;
msg.obj = true;
mHandler.sendMessage(msg);
}
}

private class Thread2 extends Thread{
    @Override
    public void run() {
        super.run();
        Log.e("1234", "Thread2开始执行");
        SystemClock.sleep(2000);//模拟Thread2在执行
        Log.e("1234", "Thread2执行完毕");
        Message msg = Message.obtain();
        msg.what = 2;
        msg.obj = true;
        mHandler.sendMessage(msg);
    }
}

private class Thread3 extends Thread{
    @Override
    public void run() {
        super.run();
        Log.e("1234", "Thread3开始执行");
        SystemClock.sleep(3000);//模拟Thread3在执行
        Log.e("1234", "Thread3执行完毕");
    }
}

private void doRunThread() {
    new Thread1().start();
    new Thread2().start();
    thread3 = new Thread3();
}
    private boolean flag1;
    private boolean flag2;
    private Thread3 thread3;
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1:
                    flag1 = (boolean)msg.obj;
                    if(flag1 && flag2)
                        thread3.start();
                    break;
                case 2:
                    flag2 = (boolean)msg.obj;
                    if(flag1 && flag2)
                        thread3.start();
                    break;
                default:
                    break;
            }
        }
    };
    private class Thread1 extends Thread{
        @Override
        public void run() {
            super.run();
            Log.e("1234", "Thread1开始执行");
            SystemClock.sleep(1000);//模拟Thread1在执行
            Log.e("1234", "Thread1执行完毕");
            Message msg = Message.obtain();
            msg.what = 1;
            msg.obj = true;
            mHandler.sendMessage(msg);
        }
    }

    private class Thread2 extends Thread{
        @Override
        public void run() {
            super.run();
            Log.e("1234", "Thread2开始执行");
            SystemClock.sleep(2000);//模拟Thread2在执行
            Log.e("1234", "Thread2执行完毕");
            Message msg = Message.obtain();
            msg.what = 2;
            msg.obj = true;
            mHandler.sendMessage(msg);
        }
    }

    private class Thread3 extends Thread{
        @Override
        public void run() {
            super.run();
            Log.e("1234", "Thread3开始执行");
            SystemClock.sleep(3000);//模拟Thread3在执行
            Log.e("1234", "Thread3执行完毕");
        }
    }

    private void doRunThread() {
        new Thread1().start();
        new Thread2().start();
        thread3 = new Thread3();
    }