- 并行:在同一时刻,有多个指令在多个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); }
}
春有百花秋有月,夏有凉风冬有雪!