线程初步
线程
目录
名词解释
程序:保存在物理介质中的代码片段
进程:程序运行起来,就变成了操作系统的一个进程
线程:程序在运行过程当中的一条独立执行线索
注意:单cpu的操作系统都是串行执行,你看到的并行只是各个进程快速切换的结果
为什么使用多线程编程
某些场景下确实能提高效率
根本目的:程序同一时间能做多件不同的事,应对多个请求,处理多个不同的任务
如何实现线程
继承Thread并重写run方法
class A extends Thread{
@Override
public void run(){}
}
class Test{
public static void main(String[] args){
A a=new A();
a.start();//注意这里是start:启动一个线程,用run是调用,一个是被动一个是主动
}
}
实现Runnable接口并实现run方法
class A implements Runnable{
@Override
public void run(){}
}
class Test{
public static void main(String[] args){
A a=new A();
Thread t=new Thread(a);
t.start();
}
如何控制线程
返回类型 | 方法名 | 描述 |
---|---|---|
void | setPriority(int) | 设置线程优先级,默认是5,优先级大的抢到时间片的概率大 |
static | sleep(long) | 让当前线程休息指定毫秒数,由执行->阻塞 |
static | yield() | 由执行->就绪 |
void | join() | 被邀请的线程结束前,其他线程都处于阻塞状态 |
注意:
静态方法:在哪个线程的线程体就是针对哪个线程的方法,如你在主线程中用其他线程对象调静态方法,它作用的对象还是主线程
阻塞:主动进入阻塞状态的方法,必须抛异常
其他方法
返回类型 | 方法名 | 描述 |
---|---|---|
void | setName()/getName() | 为线程命名 |
static | activeCount() | 得到程序中活跃的线程数量(就绪+运行+阻塞),还包括一个主线程 |
void | setDaemon(Boolean) | 设置线程为守护线程 ,注意:必须start之前设置,守护线程为其他线程提供服务,其他线程消亡,它也会自动消亡 |
interrupt() | 把处于sleep和join阻塞状态的线程唤醒 | |
static | currentThread() | 得到当前线程对象,也可以得到调用该方法的线程对象,不能用于run()中 |