線程的三種用法

1.繼承Thread

package org.pzhu.javase.se2;

import java.util.Random;

public class RectThread extends Thread {

	ThreadPanel panel;
	int speedy=0;
	int speedx=0;
	
	
	public RectThread(ThreadPanel panel) {
		super();
		this.panel = panel;
		Random random=new Random();
		
		speedx=random.nextInt()%4;
		speedy=random.nextInt()%4;
		
		speedx=speedx==0?1:speedx;
		speedy=speedy==0?1:speedy;
		
		
	}


	@Override
	public void run() {
		// TODO Auto-generated method stub
		
		while(true){
			
			panel.rectx+=speedx;
			panel.recty+=speedy;
			
			if(panel.rectx<=0||panel.rectx+20>=panel.getWidth()){
				
				speedx=-speedx;
			}
			if(panel.recty<=0||panel.recty+20>=panel.getHeight()){
				
				speedy=-speedy;
			}
			
			panel.repaint();
			
			try {
				Thread.sleep(30);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}									
			
		}											
	}
	
	
	

}
調用:
RectThread rt=new RectThread();
rt.start();

2.實現Runnable接口

package org.pzhu.javase.se2;

import java.util.Random;

public class RectThreadRunnable implements Runnable {
	
	ThreadPanel panel;
	int speedy=0;
	int speedx=0;
	
	
	public RectThreadRunnable(ThreadPanel panel) {
		//super();
		this.panel = panel;
		Random random=new Random();
		
		speedx=random.nextInt()%4;
		speedy=random.nextInt()%4;
		
		speedx=speedx==0?1:speedx;
		speedy=speedy==0?1:speedy;
		
		
	}


	@Override
	public void run() {
		// TODO Auto-generated method stub
		
		while(true){
			
			panel.rectx+=speedx;
			panel.recty+=speedy;
			
			if(panel.rectx<=0||panel.rectx+20>=panel.getWidth()){
				
				speedx=-speedx;
			}
			if(panel.recty<=0||panel.recty+20>=panel.getHeight()){
				
				speedy=-speedy;
			}
			
			panel.repaint();
			
			try {
				Thread.sleep(30);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
			
			
			
		}
		
		
		
		
		
		
		
		
	}
	

}

調用:
RectThreadRunnable runnable=new RectThreadRunnable(this);
Executor exec=new ScheduledThreadPoolExecutor(10);
exec.execute(runnable);

3.繼承TimerTask

package org.pzhu.javase.se2;

import java.util.Random;
import java.util.TimerTask;

public class RectTimerTask extends TimerTask {

	
	ThreadPanel panel;
	int speedy=0;
	int speedx=0;
	
	public RectTimerTask(ThreadPanel panel){
		this.panel = panel;
		Random random=new Random();
		
		speedx=random.nextInt()%4;
		speedy=random.nextInt()%4;
		
		speedx=speedx==0?1:speedx;
		speedy=speedy==0?1:speedy;
		
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub

			
			panel.rectx+=speedx;
			panel.recty+=speedy;
			
			if(panel.rectx<=0||panel.rectx+20>=panel.getWidth()){
				
				speedx=-speedx;
			}
			if(panel.recty<=0||panel.recty+20>=panel.getHeight()){
				
				speedy=-speedy;
			}
			
			panel.repaint();
			
			
			
		

	}

}

調用:
RectTimerTask task=new RectTimerTask(this);
		Timer timer=new Timer();
		timer.schedule(task, 0, 30);



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章