进程:是一个正在执行中的程序
每一个进程执行都有一个执行顺序,该顺序是一个执行路径或者叫一个控 制单元
线程:就是进程一个独立的控制单元,现成在控制着进程的执行(一个进程中 至少有一个线程)
java vm 启动的时候会有一个进程java.exe,该进程中至少一个线程负责java 程序的执行,而且这个线程运行的代码存在于main方法中。
该线程称为主线程。(jvm启动不止一个线程,还有负责垃圾回收机制 的线程)
创建线程的步骤:(第一种方式继承Thread方法)
1.定义类继承Thread
2.复写Thread类中的run方法
3.调用线程的start方法,该方法有两个作用:启动线程,调用方法(内存是 瓶颈)
线程运行的特性:随机性。
线程的几种状态:
start 启动并调用
sleep 停止一定的时间
wait 等待(时间限制)
notify 唤醒(notifyall全部唤醒)
stop 结束
线程都有直接默认的名字 编号从0开始
currentThread 获取当前线程对象
getName 获取线程的名字
创建线程的第二种方法:
1.定义类实现Runnable接口
2.覆盖Runnable接口的run方法
3.通过Thread类建立线程对象
4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数
5.调用Thread类的start方法开启线程,并调用runnable接口子类的run方法
实现方式和继承方式的区别
实现方式的好处:避免了单继承的局限性
在定义线程时,建立使用实现方式
继承Thread:线程代码存放在Thread子类run方法中
实现Runnable:线程代码存在接口的子类的run方法中
同步代码块(解决多个线程执行一个功能体中的内容,解决安全问题)
synchronized(对象){需要被同步的代码}
对象如同锁,持有锁的线程可以在同步中执行,没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁
同步的前提
1.必须有两个或者两个以上的线程
2.必须是多个线程使用同一个锁
好处:解决了多线程的安全问题
弊端:多个线程需要判断锁,较为消耗资源 |
|