本文已参与周末学习计划,点击查看详情。
1 通过继承Thread类创建线程
- 继承
Thread
类 - 重写
run()
方法 - 通过
start()
方法启动线程
public class MutliThread extends Thread{
private int ticket=100; //每个线程都拥有100张票
MutliThread(String name){
super(name); //调用父类带参数的构造方法
}
public void run(){
while(ticket>0){
System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
}
}
public static void main(String [] args){
MutliThread m1=new MutliThread("Window 1");
m1.start();
}
}
复制代码
2 通过实现Runnable接口创建线程
- 实现
Runnable
接口 - 实现
run()
方法 - 将
Runnable
对象提交给Thread
构造器,创建一个Thread
对象 - 通过
Thread
对象调用start()
方法启动线程
public class MutliThread implements Runnable{
private int ticket=100;//每个线程都拥有100张票
private String name;
MutliThread(String name){
this.name=name;
}
public void run(){
while(ticket>0){
System.out.println(ticket--+" is saled by "+name);
}
}
public static void main(String [] args){
MutliThread m1=new MutliThread("Window 1");
Thread t1=new Thread(m1);
t1.start();
}
}
复制代码
3 通过实现Callable接口创建线程
- 实现Callable接口,需要返回值类型
- 重写call方法,需要抛出异常
- 创建目标对象
- 创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1);
- 提交执行:Futureresult1 = ser.submit(t1);
- 获取结果:boolean r1 = result1.get()
- 关闭服务:ser.shutdowmNow();
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class CallableAndFuture {
static class MyThread implements Callable<String> {
@Override
public String call() throws Exception {
return "Hello world";
}
}
public static void main(String[] args) {
ExecutorService threadPool = Executors.newSingleThreadExecutor();
Future<String> future = threadPool.submit(new MyThread());
try {
System.out.println(future.get());
} catch (Exception e) {
} finally {
threadPool.shutdown();
}
}
}
复制代码
4 run() 与 start() 的区别
- 通过调用
Thread
类的start()
方法来启动一个线程,这时此线程处于 RUNNABLE 状态,并没有运行,一旦得到 cpu 时间片,就开始执行run()
方法,这里方法run()
称为线程体,它包含了要执行的这个线程的内容,run()
方法运行结束,此线程随即终止。 run()
方法只是类的一个普通方法而已,如果直接调用run()
方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run()
方法体执行完毕后才可继续执行下面的代码,没有达到多线程的目的。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END