java多线程的实现方式(六种)

本文详细介绍了Java中实现线程的六种主要方法,包括继承Thread类、实现Runnable接口、使用匿名内部类、利用定时器Timer、通过Callable接口实现带返回值的线程以及运用线程池进行高效并发处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 继承Thread线程

/**
 * 方式一: 继承Thread 的方式实现线程
 * @author xzb_l
 *
 */
public class ThreadDemo extends Thread{
	private int pauseTime; // 间隔时间
	private String name;
	
	public ThreadDemo(int pauseTime, String name) {
		this.pauseTime = pauseTime;
		this.name = name;
	}
	
	@Override
	public void run() {
		while (true) {
			try {
				System.out.println("name=" + this.name + "date:" + new Date());
				// 睡眠
				Thread.sleep(this.pauseTime);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		ThreadDemo t1 = new ThreadDemo(3000, "我是第一");
		ThreadDemo t2 = new ThreadDemo(5000, "我是第二");
		t1.start();
		t2.start();
	}	
}

二 实现Runnable接口

/**
 * 实现Runnable接口
 * @author xzb_l
 *
 */
public class ThreadDemo02 implements Runnable {
	private int pauseTime;
	private String name;
	
	public ThreadDemo02(int pauseTime, String name) {
		this.pauseTime = pauseTime;
		this.name = name;
	}
	
	
	@Override
	public void run() {
		while (true) {
			try {
				System.out.println(this.name +"-------" + new Date());
				Thread.sleep(this.pauseTime);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	public static void main(String[] args) {
		Thread t1 = new Thread(new ThreadDemo02(3000, "我是第一"));
		Thread t2 = new Thread(new ThreadDemo02(5000, "我是第二"));
		t1.start();
		t2.start();
	}
}

三 匿名内部类的方式

/**
 * 匿名内部类的方式
 * @author xzb_l
 *
 */
public class ThreadDemo03 {
	public static void main(String[] args) {
		
		new Thread(new Runnable() {
			public void run() {
				int i = 0;
				while ( i < 10) {
					System.out.println(System.currentTimeMillis() + "------" + i);
					i++;
				}
			}
		}).start();
	
	}
}

四 定时器Timer

/**
 * 定时器的方式
 * @author xzb_l
 *
 */
public class ThreadDemo04 {
	public static void main(String[] args) {
		Timer time = new Timer();
		time.schedule(new TimerTask() {
			
			@Override
			public void run() {
				System.out.println("每隔5秒我说这句话..");
				
			}
		}, new Date(), 5000);
		
	}
}

五 带返回值的线程回调

/**
 * 带返回值回调的线程
 * @author xzb_l
 *1. 创建一个类实现Callable接口,实现call方法。这个接口类似于Runnable接口,但比Runnable接口更加强大,增加了异常和返回值。
2. 创建一个FutureTask,指定Callable对象,做为线程任务。
3. 创建线程,指定线程任务。
4. 启动线程
 */
public class ThreadDemo05 {
		
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		// 线程回调
		Callable<String> callable = new Callable<String>() {

			@Override
			public String call() throws Exception {
				System.out.println("线程开始执行....");
				
				return "我是返回值...";
			}
		};
		// 线程任务
		FutureTask<String> futureTask = new FutureTask<>(callable);
		// 穿件线程,执行任务
		Thread thread  = new Thread(futureTask);
		thread.start();
		System.out.println("----" + futureTask.get());
	}

}

六 线程池

/**
 * 基于线程池的方式实现
 * @author xzb_l
 *
 */
public class ThreadDemo06 {
	public static void main(String[] args) {
		// 创建池
		ExecutorService threadPool = Executors.newFixedThreadPool(10);	
		while (true) {
			 threadPool.execute(new Runnable() {
				
				@Override
				public void run() {
					try {
						System.out.println(Thread.currentThread().getName() + "---正在运行---");
						Thread.sleep(3000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			});
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值