java多线程的创建几种方式
-
并行:在同一时刻,有多个指令在多个CPU上同时执行。
- 并发:在同一时刻,有多个指令在单个CPU上交替执行。
- 线程:是进程中的单个顺序控制流,是一条执行路径
单线程:一个进程如果只有一条执行路径,则称为单线程程序
多线程:一个进程如果有多条执行路径,则称为多线程程序
方法名 | 说明 |
---|---|
void run() | 在线程开启后,此方法将被调用执行 |
void start() | 使此线程开始执行,Java虚拟机会调用run方法() |
创建多线程的方式:
第一种:继承Thread类
1、定义一个类MyThread继承Thread类 2、在MyThread类中重写run()方法 3、创建MyThread类的对象 4、调用start()方法,启动线程
/**
* 继承Thread创建线程
*/
public class ThreadDemo3 {
public static void main(String[] args) {
//获得当前线程
Thread mainThread = Thread.currentThread();
System.out.println("线程名称" + mainThread.getName());
Thread thread = new MyThread();
//开启线程
thread.start();
}
}
class MyThread extends Thread{
@Override
public void run() {
//具体的业务执行代码
Thread thread = Thread.currentThread();
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println( "线程的名称"+ thread.getName());
}
}
第二种:实现Runnable接口
class MyThread2 implements Runnable{ @Override public void run() { //具体的业务代码 Thread thread = Thread.currentThread();//得到当前线程 System.out.println("线程执行:" + thread.getName()); } }
/**
* 实现Runnable接口线程
*/
public class ThreadDemo4 {
public static void main(String[] args) {
//创建Runnable
MyThread2 myThread2 = new MyThread2();
//创建一个线程
Thread thread = new Thread(myThread2);
//启动线程
thread.start();
}
}
第三种:使用内部类(利用Runnable接口)
/** * 匿名内部类 */ public class ThreadDemo5 { public static void main(String[] args) { //创建一个线程 Thread thread = new Thread(new Runnable() { @Override public void run() { //业务代码 Thread t = Thread.currentThread(); System.out.println("执行任务" + t.getName()); } }); //启动线程 thread.start(); } }
第四种:利用lambda
Thread thread=new Thread( ()->{ //业务代码 System.out.println("在这里可以编写相关代码"); } )
第五种:实现callable接口
public class MyCallable implements Callable<String> { @Override public String call() throws Exception { for (int i = 0; i < 100; i++) { System.out.println("跟女孩表白" + i); } //返回值就表示线程运行完毕之后的结果 return "答应"; } }
public class Demo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//线程开启之后需要执行里面的call方法
MyCallable mc = new MyCallable();
//可以获取线程执行完毕之后的结果.也可以作为参数传递给Thread对象
FutureTask<String> ft = new FutureTask<>(mc);
//创建线程对象
Thread t1 = new Thread(ft);
//开启线程
t1.start();
String s = ft.get();
System.out.println(s);
}
}