多线程:
一、程序、进程、线程的理解
程序:为完成特定任务,用某种语言编写一组指令的集合。也称一段静态代码。
进程:一个正在执行的程序。
线程:程序内一条执行路径。
补充:进程可以细化成多个线程。
每个线程,都拥有自己独立的程序计数器和栈
多个线程,共享同一个进程中的结构:方法区、堆。
二、并行与并发
1.单核CPU:假的多线程,主要是利用时间片的方式骗过我们,让我们误认为是多线程。
2.多核CPU: 更好的发挥多线程的效率。
3.并行:多个CPU执行多个任务。
4.并发:单个CPU采用时间片的方式执行多个任务。
三、创建多线程的两种方式
方式一:继承Thread类
①继承Thread类
②重写run() 将需要线程安全的代码放入run()中
③创建继承Thread类的对象
④调用对象的start()方法
方式二:实现Runnable接口
①实现Runnable接口
②实现run() 将需要线程安全的代码放入run()中
③创建继承Thread类的对象
④将被创建的对象作为参数创建Thread对象
⑤调用start()
两种方式的对比
开发中优先选择Runnable()方式,
1.因为java只能有单继承如果我继承了Thread类
就不能继承其他类 体现了局限性。
2.实现的方式更适合来处理多个线程共享数据的情况
四、Thread类中的常用方法
1.start():启动线程
2.run():需要实现多线程的代码放入里面
3.currentThread():获取当前线程
4.getName():获取线程名字
5.setName():设置线程名字
6.sleep():设置线程休眠时间 等待结束后继续执行后面的线程任务
7.join(): 当前线程调用其他线程的join()时 应让其他线程执行完后当前线程继续执行
8.stop():结束当前线程
9.yield(): 放弃CPU执行权
10.isAlive():判断是否存活
优先级:PRIORITY
MAX_PRIORITY:10
MIN_PRIORITY:1
NORM_PRIORITY:5
getPriority():获取当前线程的优先级
setPriority():设置当前线程的优先级
线程的分类:
守护线程 用户线程