prelude:1.1 并发和并行
● 并行:在同一时刻,有多个指令在多个CPU上同时执行
●并发:在同一时刻,有多个指令在单个CPU上交替执行
prelude:1.2 进程和线程
●进程:操作系统中正在运行的一个应用程序
●线程:应用程序中的一条执行通道
---------------------------------------------------------------------------------------------------------------------------------
1.1 多线程的实现方式
1. 继承Thread
步骤: ①定义一个类继承Thread类
②在这个子类中重写run()方法
③创建这个子类的实例对象
④启动线程
public class Main{
public static void main(String[] args){
//开启线程
new MyThread().start();
}
}
public class MyThread extends Thread{
//封装线程启动后要执行的代码
@Override
public void run(){
//线程开启后要执行的代码
System.out.println("线程开启了");
}
}
2. 实现Runnable接口
步骤: ①定义一个类(MyRunnable)实现Runnable接口
②在这个接口实现类(MyRunnable)中重写run()方法
③创建MyRunnable的实例对象
④创建Thread类的实例对象,且把MyRunnable的实例对象作为构造方法 的参数
public class Main{
public static void main(String[] args){
//创建了一个参数的对象
MyRunnable myRunnable =new MyRunnable();
//创建了一个线程对象,并把参数传递给这个线程
//在线程开启后,执行的是这个参数里的run方法
Thread thread =new Thread(myThread);
//开启线程
thread.start();
}
}
public class MyRunnable implements Runnable{
@Override
public void run(){
System.out.println("线程开启了");
}
}
3. 实现Callable和(Class)FutureTask
public class Main{
public static void main(String[] args){
MyCallable myCallable =new MyCallable();
//(相当于中间件)可以获取线程执行完毕后返回的结果
FutureTask futureTask =new FutureTask(myCallable);
//创建线程对象
Thread thread =new Thread(futureTask);
//开启线程
thread.start();
//获得线程执行完毕后返回的结果
//String result =futureTask.get();
//System.out.println(result);
}
}
public class MyCallable extends Callable<String>{
public String call(){
System.out.println("线程启动了");
}
//返回线程运行完毕之后的结果
return "线程执行完成!";
}