多线程
2020-09-04 10:22:24 0 举报
AI智能生成
java多线程的基本知识
作者其他创作
大纲/内容
创建的方式
继承的方式
1.需要定义一个自定义线程类并且继承 Thread 类
2. 在线程类中重写run方法,该方法中定义的就是本线程需要完成的任务
3. 创建线程对象,new 自定义线程类
4. 启动线程 通过自定义线程类对象.start()
实现接口的方式
1. 需要定义一个任务类,并且实现 Runnable接口
2. 在任务类中,重写run方法。该方法中定义的就是需要线程完成的任务
3. 创建线程对象,通过 Thread(Runnable r) 的构造方法
4. 启动线程,通过Thread类中的 start()
线程中常用的方法
为线程设定名字
1. 通过构造方法来设定
Thread(String name)
Thread(Runnable target, String name)
2. 通过SetName方法来设定
public final void setName(String name)
获取线程名
public final String getName()
注意: Runnable中没有该方法,因此不可以在Runnable中直接使用 getName()
获取执行当前代码的线程对象
public static Thread currentThread()
影响线程执行的操作
线程的休眠
public static void sleep(long millis)
执行当前方法的线程,会进行休眠。该方法是定义在 线程任务中
自定义线程的情况下,任务就是run方法
main线程 ,任务就是方法体
提高线程优先级
public final void setPriority(int newPriority)
newPriority的取值范围是 1 ~ 10,默认情况下是5
值越高,会为线程设定更多的资源。
注意:必须是在启动之前,设定优先级
将某个线程设定为守护线程
public final void setDaemon(boolean on)
注意:必须在启动之前,设定
如果所有执行的线程中只剩守护线程的情况时,程序结束
一般情况下,守护线程都是一个死循环 (无限循环)
等待某个线程执行结束
public final void join()
注意:调用该方法之前,不要启动其他线程。至启动要有限执行并结束的线程
线程的生命周期
新建状态
new 一个线程对象
就绪状态
调用线程的start方法,启动线程,当前cpu还没有执行本线程
运行状态
本时刻cpu正在执行当前线程的任务
阻塞状态
进入阻塞
1.调用了sleep方法
2.执行 wait方法,进入到等待区
3. 执行IO操作
4. 执行同步语句的时候,在等待的过程中
解除阻塞
1. sleep方法的休眠时间结束了
2. 执行notify 或 notifyAll方法,从等待区中唤醒
3. IO操作结束
4. 获取锁对象,有了可以执行同步语句的资格
死亡状态
1. 线程的任务完成了
2. 执行stop方法
3. 线程抛出一个没有被处理的异常
4. 退出虚拟机 System.exit(0)
Object中关于线程的方法
Object表示的是同步锁对象
public final void wait()
当前线程进入到等待区
public final void notify()
从等待区中唤醒一个线程
public final void notifyAll()
将等待区中所有的线程唤醒
同步
同步代码块
synchronized (同步锁对象) { 同步执行的代码 }
注意:必须要保证在内存中只能有唯一的同步锁对象
同步方法
静态同步方法
默认锁对象就是 类名.class
非静态同步方法
默认锁对象就是 this
线程池
1.通过工具类 Executors 中的方法获取线程池
public static ExecutorService newFixedThreadPool(int nThreads)
nThread表示线程池中的线程个数
public static ExecutorService newSingleThreadExecutor()
2. 通过ExecutorService提交线程
Future<?> submit(Runnable task)
task参数就是 要提交给线程池执行的任务 ,也就是Runnable实现类对象
3.关闭线程池
void shutdown()
List<Runnable> shutdownNow()
立刻关闭 ,可以关闭正在执行任务的线程
优势:在使用线程的过程中不需要频繁的声明和关闭线程,在线程池中任务结束的线程会重新回到线程池中。
0 条评论
下一页