概述
进程(process)可以包含多个线程
三种创建方式:
- Thread class 继承Thread类
不建议使用:避免OOP单继承局限性。 - Runnable接口 实现Runnable接口
推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
发现问题,多个对象,操作同一个资源的情况下,线程不安全 - Callable接口 实现Callable接口
注意:线程开启不一定立即执行,由CPU调度执行。
1、自定义线程类继承Thread类,重写run()方法,编写线程执行体,创建线程对象,调用start()方法启动线程。
不建议使用:避免OOP单继承局限性。
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
创建一个线程并启动它运行:
PrimeThread p = new PrimeThread(143);
p.start();
2、实现Runnable接口,重写run()方法,编写线程执行体,创建线程对象,创建一个Thread对象然后调用start()方法启动线程(代理),new Thread(testRunnable2).start() 。
推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用。
例如,买火车票时的票数控制对象等。
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
创建一个线程并启动它运行:
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
new Thread(p,"小明").start();
new Thread(p,"小红").start();
3、实现Callable接口(了解即可,一般不用),实现Callable接口,需要返回值类型,重写call方法,需要抛出异常,创建目标对象,创建执行服务:,提交执行:,获取结果:,关闭服务:。
class TestCallable implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
. . .
return true;
}
}
创建一个线程并启动它运行:
TestCallable t1 = new TestCallable();
TestCallable t2 = new TestCallable();
TestCallable t3 = new TestCallable();
//创建执行服务
ExecutorService ser = Executors.newFixedThreadPool(3);
//提交执行
Future<Boolean> r1 = ser.submit(t1);
Future<Boolean> r2 = ser.submit(t2);
Future<Boolean> r3 = ser.submit(t3);
//获取结果
boolean rs1 = r1.get();
boolean rs2 = r2.get();
boolean rs3 = r3.get();
//关闭服务
ser.shutdown();
最后
以上就是调皮黑裤为你收集整理的1、java线程(thread)实现多线程的三种方法的全部内容,希望文章能够帮你解决1、java线程(thread)实现多线程的三种方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复