关于java 中线程的问题!(100分)

  • 主题发起人 主题发起人 linuxcrow
  • 开始时间 开始时间
L

linuxcrow

Unregistered / Unconfirmed
GUEST, unregistred user!
我有两个代码段,顺序执行.
code A
code B
但是在A 中create 了一个process
我在B中要用到A中的这个process的结果,
请问我如何设置线程,使A结束后才执行B
谢谢!!
 
使用线程同步技术,给你一段例程
import java.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class MyView extends javax.swing.JFrame implements ActionListener
{
JButton b11,b12,b13,b14,b21,b22,b23,b24;
JLabel lb;//用来显示value
MyViewListener syn;
public void actionPerformed(ActionEvent e){
if(e.getSource().equals(b11))
syn.startIncrease();
else
if(e.getSource().equals(b12))
syn.suspendIncrease();
else
if(e.getSource().equals(b13))
syn.stopIncrease();
else
if(e.getSource().equals(b14))
syn.resumeIncrease();
else
if(e.getSource().equals(b21))
syn.startDecrease();
else
if(e.getSource().equals(b22))
syn.suspendDecrease();
else
if(e.getSource().equals(b23))
syn.stopDecrease();

else
if(e.getSource().equals(b24))
syn.resumeDecrease();
}
public void setMyViewListener(MyViewListener ls){
/**
* @param ls 用户向界面发出命令时就会调用ls相关的方法
*/
syn=ls;
}
public void showValue(int v){
/**
* 在界面上显示v的值
*/
lb.setText(" "+Integer.toString(v));
}
public MyView(){
super();
b11=new JButton("IncreaseStart");
b12=new JButton("IncreaseSuspend");
b13=new JButton("IncreaseStop");
b14=new JButton("IncreaseResume");
b21=new JButton("DecreaseStart");
b22=new JButton("DecreaseSuspend");
b23=new JButton("DecreaseStop");
b24=new JButton("DecreaseResume");
lb=new JLabel(" JLabel");
getContentPane().setLayout(new GridLayout(3,3));
getContentPane().add(b11);
getContentPane().add(b12);
getContentPane().add(b14);
getContentPane().add(b21);
getContentPane().add(b22);
getContentPane().add(b24);
getContentPane().add(b13);

getContentPane().add(b23);
getContentPane().add(lb);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b21.addActionListener(this);
b22.addActionListener(this);
b23.addActionListener(this);
b24.addActionListener(this);
}
public MyView(String sTitle){
super(sTitle);
b11=new JButton("IncreaseStart");
b12=new JButton("IncreaseSuspend");
b13=new JButton("IncreaseStop");
b14=new JButton("IncreaseResume");
b21=new JButton("DecreaseStart");
b22=new JButton("DecreaseSuspend");
b23=new JButton("DecreaseStop");
b24=new JButton("DecreaseResume");
lb=new JLabel(" JLabel");
getContentPane().setLayout(new GridLayout(3,3));
getContentPane().add(b11);
getContentPane().add(b12);
getContentPane().add(b14);
getContentPane().add(b21);
getContentPane().add(b22);
getContentPane().add(b24);
getContentPane().add(b13);

getContentPane().add(b23);
getContentPane().add(lb);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b21.addActionListener(this);
b22.addActionListener(this);
b23.addActionListener(this);
b24.addActionListener(this);
}
}
public class SynchDemo implements MyViewListener,WindowListener{

//请添加合适的成员
public static int val=0;
public IncreaseThread Increase=new IncreaseThread();
public DecreaseThread Decrease=new DecreaseThread();
public static void main(String args[]){
SynchDemo control=new SynchDemo();
MyView view=new MyView("MyJFrame");
view.setSize(500,200);
view.setBackground(Color.gray);
view.setVisible(true);
view.setMyViewListener(control);
control.Increase.setMyView(view);
control.Decrease.setMyView(view);
}
public void startIncrease(){
//请在此处添加您的程序
Increase.start();
}

public void startDecrease(){
//请在此处添加您的程序
Decrease.start();
}

public void suspendIncrease(){
//请在此处添加您的程序
Increase.suspend();
}

public void suspendDecrease(){
//请在此处添加您的程序
Decrease.suspend();
}

public void resumeIncrease(){
//请在此处添加您的程序
Increase.resume();
}

public void resumeDecrease(){
//请在此处添加您的程序
Decrease.resume();
}

public void stopIncrease(){
//请在此处添加您的程序
Increase.stop();
}

public void stopDecrease(){
//请在此处添加您的程序
Decrease.stop();
}
class IncreaseThread extends Thread{
MyView innerView;
public IncreaseThread(){
super();
innerView=new MyView();
}
public void setMyView(MyView view){
innerView=view;
}
public void run(){
try{
while(true){
val=(val+1)%6;
innerView.showValue(val);
sleep((int)(Math.random()*1000));
}
}catch(InterruptedException e){}
}
}
class DecreaseThread extends Thread{
MyView innerView;

public DecreaseThread(){
super();
innerView=new MyView();
}
public void setMyView(MyView view){
innerView=view;
}
public void run(){
try{
while(true){
val=(val+6-1)%6;
innerView.showValue(val);
sleep((int)(Math.random()*1000));
}
}catch(InterruptedException e){}
}
}
public void windowClosing(WindowEvent e){
System.exit(1);
}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowOpened(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
}
interface MyViewListener{
/**
* 当用户从图形界面发出开启增量线程的命令时就会调用该方法
*/
public void startIncrease();

/**
* 当用户从图形界面发出开启减量线程的命令时就会调用该方法
*/
public void startDecrease();

/**
* 当用户从图形界面发出暂停增量线程的命令时就会调用该方法
*/
public void suspendIncrease();

/**
* 当用户从图形界面发出暂停减量线程的命令时就会调用该方法
*/
public void suspendDecrease();

/**
* 当用户从图形界面发出继续增量线程的命令时就会调用该方法
*/
public void resumeIncrease();

/**
* 当用户从图形界面发出继续减量线程的命令时就会调用该方法
*/
public void resumeDecrease();


/**
* 当用户从图形界面发出停止增量线程的命令时就会调用该方法
*/
public void stopIncrease();

/**
* 当用户从图形界面发出停止减量线程的命令时就会调用该方法
*/
public void stopDecrease();

}
 
后退
顶部