多 线 程
一.基本知识
线程:线程是操作系统能够运行调度的最小单位
进程:进程是程序执行实体
多线程应用场景:拷贝、迁移大文件,加载大量的资源文件
并发:有多个指令在单个cpu上交替执行
并行:在同一时刻人,有多个指令在多个cpu上同时执行
二.实现方式
1.继承Thread类的方式实现
public class test extends Thread{
@Override
public void run() {
...
}
}
2.实现Runnable接口的方式进行实现
public class MyRun implements Runnable{
@Override
public void run() {
...
}
}
public class text{
public static void main(String[] args) {
MyRun m=new MyRun();
Thread t=new Thread(m);
t.start();
}
}
3.利用Callable接口和Future接口方式实现(能够返回结果值)
public class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
return 0
}
}
public class text{
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable mc = new MyCallable();
FutureTask<Integer> ft = new FutureTask<>(mc);
Thread t=new Thread(ft);
t.start();
Integer result=ft.get();
}
}
三.常见的成员方法
1.能够设置和获取线程名字是因为他们都继承于Object类
而且三种方法在实验类中获取线程的名字方式不同
而且方法也需要重写
2.线程的优先级
优先级越高抢到cpu的概率越高(并非一定能强到执行权)
3.守护线程
直接调用方法并且加true即可设置为守护线程
当其他非守护线程执行完毕后,守护线程也会陆续结束
应用场景:聊天时发送文件,发送文件为守护线程
4.出让线程
表示出让当前cpu的执行权
在run中用thread调用
让线程执行尽可能均匀
5.插入线程
在测试类中调用即可
表示把该线程调用到当前线程之前
三.线程的生命周期