微信登录

多线程 - 方式一 - 继承Thread类 - 了解

方式一继承Thread 没有数据共享

  1. //1. 创建一个继承于Thread类的子类
  2. class MyThread extends Thread {
  3. //2. 重写Thread类的run()
  4. @Override
  5. public void run() {
  6. //代码
  7. }
  8. }
  9. }
  1. public class ThreadTest {
  2. public static void main(String[] args) {
  3. //3. 创建Thread类的子类的对象
  4. MyThread t1 = new MyThread();
  5. //4.通过此对象调用start():①启动当前线程 ② 调用当前线程的run()
  6. t1.start();
  7. //问题一:我们不能通过直接调用run()的方式启动线程。
  8. // t1.run();
  9. //问题二:再启动一个线程,遍历100以内的偶数。不可以还让已经start()的线程去执行。会报IllegalThreadStateException
  10. // t1.start();
  11. //我们需要重新创建一个线程的对象
  12. MyThread t2 = new MyThread();
  13. t2.start();
  14. }
  15. }

创建一个子类extend继承Thread
子类重写run()方法

实例化子类
调用start()方法

获得线程名字是 main,还是Thread-0
Thread.currentThread.getName()

快捷写法

  1. //创建Thread类的匿名子类的方式
  2. new Thread(){
  3. @Override
  4. public void run() {
  5. //代码
  6. }
  7. }.start();

Thread中的常用方法:

  1. start():启动当前线程;调用当前线程的run()
  2. run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
  3. currentThread():静态方法,返回执行当前代码的线程
  4. getName():获取当前线程的名字
  5. setName():设置当前线程的名字
  6. yield():释放当前cpu的执行权
  7. join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才 结束阻塞状态。
  8. stop():已过时。当执行此方法时,强制结束当前线程。
  9. sleep(long millitime):让当前线程“睡眠”指定的millitime毫秒。在指定的millitime毫秒时间内,当前线程是阻塞状态。
  10. isAlive():判断当前线程是否存活

线程的优先级:

1.
MAX_PRIORITY:10
MIN _PRIORITY:1
NORM_PRIORITY:5 —>默认优先级
2.如何获取和设置当前线程的优先级:
getPriority():获取线程的优先级
setPriority(int p):设置线程的优先级
说明:高优先级的线程要抢占低优先级线程cpu的执行权。但是只是从概率上讲,高优先级的线程高概率的情况下被执行。并不意味着只有当高优先级的线程执行完以后,低优先级的线程才执行。

多线程 - 方式一 - 继承Thread类 - 了解