线程创建的三种方式

(1)继承Thread类,重写run方法,调用start方法,启动线程进入就绪状态。

public class ThreadDemo01 {
	public static void main(String[] args) {
		//创建线程对象,启动任务
		Thread t1 = new MyTask();
		Thread t2 = new MyTask();
		t1.start();
		t2.start();
		System.out.println("main方法over");
	}
}
/**方法一、通过继承Thread,完成线程定义*/
class MyTask extends Thread{
	//重写run方法
	@Override
	public void run() {
		for(int i=0;i<1000;i++) {
			System.out.println(this.getName()+":"+1);
		}
	}
	
	
}

(2)实现Runnable接口,重写run方法,传给Thread对象,由Thread对象调用start方法启动线程。

public class ThreadDemo02 {
	public static void main(String[] args) {
		Runnable r1 = new MyTask1();
		Thread t1 = new Thread(r1);
		Runnable r2 = new MyTask1();
		Thread t2 = new Thread(r2);
		t1.start();
		t2.start();
		System.out.println("main方法结束");
	}
}
/**方法二:实现接口,完成任务的定义*/
class MyTask1 implements Runnable{
	//重写run方法,定义任务内容
	@Override
	public void run() {
		int num = (int)(Math.random()*100);
		for(int i=0;i<500;i++) {
			System.out.println("SweeneyIsMine"+num);
		}
	}
}

(3)创建Callable的子类对象,重写call方法(有返回值,返回值类型为泛型类型),传给FutureTask对象(有泛型),将FutureTask对象传给Thread对象,由Thread对象调用start方法,启动线程。

public class ThreadDemo04 {
	public static void main(String[] args) {
		FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
			public String call() throws Exception{
				//call方法返回值就是泛型类型
				int count = 0;
				for(int i=0;i<100;i++) {
					if(i%2!=0) {
						count+=i;
					}
				}
				System.out.println("count");
				return count+"";
			}
		});
		Thread t1 = new Thread(task);
		t1.start();
	}
	
}

猜你喜欢

转载自blog.csdn.net/Betty_betty_betty/article/details/82142893
今日推荐