线程的概述
1 创建线程的方式一:继承Thread类
步骤:
- 创建一个继承Thread 类的子类;
- 重写Thread类run()----》将此线程要执行的操作,声明在此方法中;
- 创建当前Thread的子类的对象;
- 通过对象调用start():1 启动线程,2调用当前线程的run()
// 创建一个继承Thread 类的子类;
public class PritNumer extends Thread{
//重写Thread类run()----》将此线程要执行的操作,声明在此方法中;
@Override
public void run(){
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
System.out.println("Prit");
} else {
System.out.println(i);
}
}
}
}
public class PritMain {
public static void main(String[] args) {
//创建当前Thread的子类的对象;
PritNumer pritNumer = new PritNumer();
// 通过对象调用start():1 启动线程,2调用当前线程的run()
pritNumer.start();
}
}
2 创建线程的方式二:实现Runnable接口
步骤:
- 创建一个实现Runnable接口的类;
- 实现接口中的run()–》将此线程要执行的操作声明在此方法中;
- 创建当前实现类的对象;
- 将此对象作为参数传递到Thread来的构造器中,创建Thread类的实例;
- Thread类的实例调用start():1启动线程,2调用当前线run();
public class EvenNumberPrint implements Runnable{
@Override
public void run(){
for(int i =1;i<=100; i++){
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
public class EvenNumberTest {
public static void main(String[] args) {
EvenNumberPrint p = new EvenNumberPrint();
Thread t1 = new Thread(p);
t1.start();
}
}
线程的常用结果
线程中的构造器
-public Thread(): 分配一个新的线程对象
-public Thread(String name): 分配一个指定名字的新线程
-public Thread(Runnable target): 指定创建线程的目标对象,实现了Runnable接口中的run方法;
-public Thread(Runnable target,string name):分配一个带指定目标新的线程对象并指定名字。
线程中的常用方法
start() 启动线程,调用线程的run()
run() 将线程要执行的操作声明在run()中
currentThread() 获取当前执行代码对应的线程;
getName() 获取线程名称
setName()设置线程名称
sleep(long millis):静态方法,调用时,可以指定当前线程睡眠的毫秒数;
yield()静态方法,一旦执行此方法,就释放CPU的执行权,
join()在线程a中通过线程b调用join(),意味着线程A进入阻塞状态,知道线程b执行结束,线程a才结束阻塞状态,继续执行;
isAlive() 判断当前线程时否存活
过时方法
stop()强行结束一个线程的执行,直接进入死亡状态,不建议使用
void suspend()/void resume():可能造成死锁,所以也不建议使用
编程的优先级
getPriority() 获取线程的优先级
setPriority() 设置线程的优先级 范围【1-10】
Thread内部声明的三个常量