Thread:自定义线程的创建方式
方式一:
- 自定义一个类继承Thread类。
- 重写Thread类的run方法,把自定义线程的任务代码写在run方法上。
- 创建Thread的子类对象,并且调用start方法启动一个线程。
注意:千万不要直接调用run方法,调用start方法的时候线程会开启,并执行run方法中的代码。当直接调用run方法时相当于调用了一个普通方法。
方式二:
- 自定义一个类实现Runnable接口。
- 实现Runnable接口的run方法,把自定义线程的任务定义在run方法上。
- 创建Runnable实现类对象。
- 创建Thread类的对象,并且把Runnable实现类的对象作为实参传递。
- 调用Thread对象的start方法开启一个线程。
注意:
Runnable实现类的对象并不是一个线程对象,只不过是实现了Runnable接口的对象而已。只有是Thread或者Thread的子类才是线程对象。
把Runnable事项类的对象作为实参传递给Thread对象的作用是把Runnable实现类的对象的run方法作为了线程的任务代码去执行。
*推荐使用第二种方式实现Runnable接口。
*因为Java单继承,多实现。
线程的通讯
线程通讯:一个线程完成了自己的任务时,要通知另外一个线程去完成另外一个任务。
wait():等待 如果线程执行了wait方法,那么该线程会进入等待的状态,等待状态下的线程必须
要被其他线程调用notify方法才能唤醒。
notify():唤醒 唤醒等待的线程
wait与notify方法要注意的事项:
- wait方法与notify方法属于Object对象。
- wait方法与notify方法必须要在同步代码块或者是同步函数中使用。
- wait方法与notify方法必须由锁对象调用。
网友评论