⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 movebutton.java

📁 这个讲解双线程的
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
public class MoveButton extends Frame implements Runnable,ActionListener
{  Thread first,second,third;//用Thread类声明first,second两个线程对象
   Button redButton,greenButton,blueButton,startButton;
   int distance=10;
   MoveButton()
   {  first=new Thread(this);//创建first线程,当前窗口做为该线程的目标对象
      second=new Thread(this);//创建first线程,当前窗口做为该线程的目标对象
      third=new Thread(this);
      redButton=new Button();
      greenButton=new Button();
      blueButton=new Button();
      redButton.setBackground(Color.red);
      greenButton.setBackground(Color.green);
      blueButton.setBackground(Color.blue);
      startButton=new Button("start");
      startButton.addActionListener(this);
      setLayout(null);
      add(redButton);
      redButton.setBounds(10,60,15,15);
      add(greenButton);
      greenButton.setBounds(100,60,15,15);
      add(blueButton);
      blueButton.setBounds(200,60,15,15);
      add(startButton);
      startButton.setBounds(10,100,30,30);
      setBounds(0,0,300,200);
      setVisible(true);
      validate();
      addWindowListener(new WindowAdapter()
                        { public void windowClosing(WindowEvent e)
                           { System.exit(0);
                           }
                        }
                       );
   }
   public void actionPerformed(ActionEvent e)
   {  try{  first.start();
            second.start();
            third.start(); 
         } 
      catch(Exception exp){}
   }
   public void run()
   {  while(true)
      {  if(Thread.currentThread()==first) //判断当前占有CPU资源的线程是否是first
          {   moveComponent(redButton);
              try{ Thread.sleep(20);
                 }
              catch(Exception exp){}
          }
         if(Thread.currentThread()==second) //判断当前占有CPU资源的线程是否是second
          {   moveComponent(greenButton);
               try{ Thread.sleep(20);
                 }
               catch(Exception exp){}
          } 
          if(Thread.currentThread()==third)
          {   moveComponent(blueButton);
              try{Thread.sleep(20);
              }
              catch(Exception exp){}
          }
      }
   }
   public synchronized void moveComponent(Component b)
   {
      if(Thread.currentThread()==first)
          {   while(distance>100&&distance<=200)
               try{ wait();
                  }
              catch(Exception exp){}
              distance=distance+1;
              b.setLocation(distance,60);
              if(distance>=100)
               {  b.setLocation(10,60);
                  notifyAll();
               }
          }
      if(Thread.currentThread()==second)
          {   while(distance>=10&&distance<100)
               try{ wait();
                  }
              catch(Exception exp){}
              distance=distance+1;
              b.setLocation(distance,60);
              if(distance>200) 
                { 
                   b.setLocation(100,60);
                   notifyAll();
                }
          }
       if(Thread.currentThread()==third)
       {while(distance>=10&&distance<200)
       	try{wait();
       	}
       	catch(Exception exp){}
       	distance=distance+1;
       	b.setLocation(distance,60);
       	if(distance>=300)
       	{
       		distance=10;
       	    b.setLocation(200,60);
       	    notifyAll();
       	}
       	
       }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -