java基础(jdk1.8)
**
多线程—线程创建
**
此篇博客主要讲如何创建线程,并且创建线程的区别
继承Thread类
线程创建第一种方式,即直接继承线程类,并使用线程的方法即可。
//继承Thread类必须实现run方法,也就是线程执行的任务
class MyThread extends Thread{
public void run(){
//run的方法具体实现
}
}
//调用位置
Thread t = new MyThread();
t.start();
实现Runnable接口
//实现Runnable接口需要实现run方法,线程执行的任务体
class MyRunnable implements Runnable{
public void run(){
//run的方法具体实现
}
}
//调用位置 启动
Runnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();
实现Callable接口
//实现Callable接口需要实现call方法,线程执行的任务体
class MyCallable implements Callable{
public Object call(){
//call的方法具体实现
return 0;
}
}
//调用位置 启动
Callable c = new MyCallable();
Thread t = new Thread(c);
t.start();
创建线程的区别
-
1.创建方式
继承与实现的区别 -
2.Runnable和Callable区别
runnable需要实现run方法,方法无返回值
callable实现call方法,方法有返回值
call方法可以返回Object类型然后放入Future内达到对线程执行过程的检测
创建线程快捷方式
//第一种方式,匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
},"t1").start();
//第二种方式, lambda表达式
new Thread(()->{
System.out.println(Thread.currentThread().getName());
},"t2").start();
//第三种方式
private static class A{
public void get(){
}
}
A a = new A();
new Thread(a::get).start(); //将get方法作为线程的run方法
run方法和start方法的区别
start方法
start方法启动一个线程,并调用run方法
run方法
run方法直接执行方法体,并不会创建线程,执行方法的线程是调用run方法的那个线程
public static void main(String[] args) {
new Thread(()-> {
//Thread.currentThread().getName()是打印当前执行线程的名称
System.out.println(Thread.currentThread().getName());
},"t1").run();
new Thread(()->{
System.out.println(Thread.currentThread().getName());
},"t2").start();
}
运行结果
main
t2
证明第一个打印语句是由mian线程执行,第二个打印语句由t2线程执行
说明run方法不会启动一个新的线程
上一篇 》进程与线程关系
下一篇 》Thread类常用方法