java线程的创建

2020-08-15 17:53发布

java线程的创建方式

java线程的创建方式大致可以分为四种:

1,通过继承Thread类创建线程

2,通过实现Runnable接口创建线程

3,实现Callable接口,通过FuturaTask调度

4,使用线程池框架创建线程(暂不做介绍)

  • 1,通过继承Thread类创建线程
package day717.Thread;
/**
 * 创建线程方法一:
 * 	创建普通类 继承thread
 * 	重写run()方法
 * 	创建当前类的对象调用start()方法启动线程
 * @author 黄小宝
 *
 */
public class MyThread1 extends Thread{
	
	//重写run()方法
	@Override
	public void run() {
		
		for (int i = 0; i < 10; i++) {
			System.out.println("子线程:"+i);
		}
	}
	
	public static void main(String[] args) {
		//创建线程对象
		MyThread1 t1= new MyThread1();
		//t1.run();//这不叫线程启动,这是方法调用
		t1.start();//线程启动调用start()方法
		
//		//采用匿名内部类实现
//		new Thread() {
//			@Override
//			public void run() {
//				
//				for (int i = 0; i < 10; i++) {
//					System.out.println("子线程:"+i);
//				}
//			}
//		}.start();
	
		//主线程
	for (int i = 0; i < 10; i++) {
		System.out.println("主线程--------->"+i);
		}

	}
}

运行结果:

主线程--------->0
子线程:0
主线程--------->1
子线程:1
主线程--------->2
子线程:2
主线程--------->3
子线程:3
子线程:4
子线程:5
子线程:6
子线程:7
子线程:8
子线程:9
主线程--------->4
主线程--------->5
主线程--------->6
主线程--------->7
主线程--------->8
主线程--------->9

  • 2,通过继承Runnable接口创建线程
/**
 * 	线程创建的方法二
 * 	1创建一个java类继承runnable接口
 * 	2重写run()方法
 * 	@author 黄小宝
 *
 */
public class MyThread2 implements Runnable{

	@Override
	public void run() {
		
		for (int i = 0; i < 10; i++) {
			System.out.println("子线程--------->"+i);
		}
	}
	public static void main(String[] args) {
		
		//创建一个实现了runnable接口的类的对象
		MyThread2 t2=new MyThread2();
		Thread t=new Thread(t2);
		t.start();
		
		//也可以使用匿名内部类或者拉姆达表达式实现
//		new Thread(new Runnable() {
//			
//			@Override
//			public void run() {
//				for (int i = 0; i < 10; i++) {
//					try {
//						Thread.sleep(1000);
//					} catch (InterruptedException e) {
//						// TODO Auto-generated catch block
//						e.printStackTrace();
//					}
//					System.out.println("子线程--------->"+i);
//				}
//			}
//		}).start();;		
		
		
		for (int i = 0; i < 10; i++) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("主线程"+i);
		}
	}
}

运行结果:

主线程0
子线程--------->0
主线程1
子线程--------->1
主线程2
子线程--------->2
主线程3
主线程4
主线程5
主线程6
主线程7
主线程8
主线程9
子线程--------->3
子线程--------->4
子线程--------->5
子线程--------->6
子线程--------->7
子线程--------->8
子线程--------->9

通过实现ruannable接口去创建对象也需要通过Thread去创建对象然后再调用start()方法。

  • 3,通过实现Callable接口,通过FuturaTask调度
package day717.Thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
/***
 * 线程创建方式三
 * 创建类,实现callable接口
 * 启动方法start()
 *实现call方法
 * 
 * @author 黄小宝
 *
 */
public class MyThread3 implements Callable<Integer>{

	@Override
	public Integer call() throws Exception {
		
		int sum=0;
		for (int i = 1; i<=100; i++) {
			sum+=i;
			System.out.println("本次计算结果:"+sum);
		}
		return sum;
	}
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		
		//这里也就是设计模式中的:装饰器模式
		//创建实现该接口的类的对象
		MyThread3 t3= new MyThread3();
		//基于callable创建futuretask
		FutureTask<Integer> task=new FutureTask<Integer>(t3);
		//将futuretask作为参数传递给thread
		Thread t=new Thread(task);
		
		
		t.start();
		
		//获取返回结果
		int count=task.get();
		System.out.println("最终结果:"+count);
	}
}

运行结果:

本次计算结果:1
本次计算结果:3
本次计算结果:6
本次计算结果:10
本次计算结果:15
本次计算结果:21
本次计算结果:28
本次计算结果:36
本次计算结果:45
本次计算结果:55
本次计算结果:66
本次计算结果:78
本次计算结果:91
本次计算结果:105
本次计算结果:120
本次计算结果:136
本次计算结果:153
本次计算结果:171
本次计算结果:190
本次计算结果:210
最终结果:210

标签: