如何创建一个线程的生命周期?
如何通过 Runnable创建多线程接口?
多线程有三个特点-----了解线程的工作流程
1.随机性:同一时刻只有一个线程在执行;cpu的快速切换导致认为有多个线程在同时执行。
2.CPU分时调度:CPU分配给每个线程一个时间片。
eg:比如说,每个线程只能执行2秒,那么2秒后,就会切换下一个线程执行2秒。线程时间不足2秒的就提前终止,超过2秒的就下一次分配到了执行。
2.1 OS底层算法决定线程的执行顺序:FCFS(先来先执行,执行不完下一次)算法,SJS(第一次没执行完就下一次)
3.线程的状态:5个,新建、就绪、执行、阻塞、终止
3.1 线程新建会先去申请PCB,分配资源,将其转化为就绪状态插入到队列中,准备执行
3.2 线程只有 就绪 才会分配CPU去执行,执行过程因为一些原因会导致程序阻塞,阻塞后需要就绪才能继续执行。
3.3 执行完后就会终止
**线程启动的方式:启动线程的唯一方法就是通过Thread类的start()实例方法(API手册搜Thread,有两种方法的介绍和代码)。
线程跑起来的方法是run(),调用Thread类的static()方法时,会自动调用run()。
多线程的创建有两种方式:
1. 建立一个子类,继承Thread类,然后重写run()方法,创建子类对象,调用Thread的static()方法,实现线程的启动。
多线程,就是创建多个对象,都调用static()方法,就是多线程的实现。
Thread.currentThread()获取当前的线程对象
package Tread;
/*方法一*/
public class Tread01 {
public static void main(String[] args) {
Student a=new Student();
Student b=new Student();
Student c=new Student();
a.start();
b.start();
c.start();
}
}
class Student extends Thread{
public void run() {
for (int i=0;i<10;i++){
System.out.println(i+"="+Thread.currentThread());
}
}
}
2.通过接口Runnable的run()方法,实现run()方法的重写(run()里放的就是你需要执行的功能代码),
Thread(Rannable)方法将接口的实力类与Thread对接,再创建多个对象执行。
package Tread;
/*方法二*/
public class Thread02 {
public static void main(String[] args) {
Son a=new Son();
Thread b=new Thread(a);
}
}
class Son implements Runnable{
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println(i+Thread.currentThread().getName());
}
}
}