程序,进程,线程
JAVA创建多线程
方式1:继承于thread类
1.创建一个继承于Thread类的子类
2.重写Thread类的run()
3.创建Thread类的子类的对象
4.通过此对象调用start()
tips
1.不能通过直接调用run()的方式来启动线程
2.start()方法只能使用一次,即不可以让已经start()的线程再去start(),若要再来个线程,需要创建一个新对象
方式1.1:创建thread类的匿名子类的方式
Thread中的常用方法
方式2:实现Runnable接口的方式
1.创建一个实现了Runnable接口的类
2.实现类去实现Runnalbe接口中的抽象方法:run()
3.创建实现类的对象
4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
5.通过Thread类的对象调用start()
方式1和方式2的区别
开发中:优先选择实现Runnable接口的方式
原因:1.实现的方式没有单继承性的局限性
2.实现的方式更适合来处理多个线程有共享数据的情况
联系:public class Thread implements Runnable
相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。
线程的优先级
线程的分类
java线程分为守护线程和用户线程。
用户线程有主线程等,守护线程有垃圾回收线程等。守护线程依赖于用户线程。
线程的生命周期
线程的安全问题
用同步的方式解决线程的安全问题
解决方式一:同步代码块
synchronized(同步监视器){
//需要被同步的代码
}
说明:操作共享数据的代码,即为需要被同步的代码
共享数据:多个 线程共同操作的变量。比如ticket
同步监视器:俗称锁
要求:多个线程必须共用同一把锁