目录
  1. 1. 认识多线程
  2. 2. 开发线程
    1. 2.1. 方法1:继承 Thread 类开发多线程
    2. 2.2. 方法2:实现 Runnable 接口开发多线程
    3. 2.3. 两种方法比较
  3. 3. 线程控制
Java多线程开发

认识多线程

  • 进程(process):操作系统层面,计算机能够“同时”运行的各个应用程序;管理上,每个进程占用独自的内存资源分时间片
  • 线程(Thread):应用程序层面,程序能够“同时”运行的各个任务;管理上,各个线程共用进程的内存资源
    • 例:一个程序,可以下载文件,同时播放音乐。两个任务分别运行。

开发线程

  • 关键是将需要用线程管理的代码(不依赖主程序,可以同时运行的代码),放在线程中

方法1:继承 Thread 类开发多线程

  1. 继承 java.lang.Thread 类开发多线程

    1
    class MyThread extends Thread
  2. 在这个类重写 Thread 类中的run函数

    1
    public void run(){}
  3. 实例化线程对象,调用其 start() 函数启动该线程

    1
    2
    MyThread thread = new MyThread();
    thread.start();

方法2:实现 Runnable 接口开发多线程

  1. 编写一个类,实现 java.lang.Runnable 接口

    1
    class MyRunnable implements Runnable
  2. 在这个类中重写 java.lang.Runnable 接口中的函数:

    1
    public void run(){}
  3. 实例化 java.lang.Thread 对象,实例化上面编写的 Runnable 实现类,将后者传入 Thread 对象的构造函数,调用 Thread 对象的 start() 函数来启动线程

    1
    2
    3
    4
    5
    Runnable threadJob = new MyRunnable();
    Thread thread = new Thread(threadJob);
    thread.start();
    // 等价于
    // new Thread(new MyRunnable()).start();

两种方法比较

  1. 第一种每个对象都是一个线程,而第二种每个对象不是一个线程,必须将其传入Thread对象才能运行
  2. 第一种每个线程都有自己的成员变量,而第二种共享成员变量
  3. Java不支持多重继承,只能继承一个类,但是可以实现多个接口,第一种方法虽然较简单,但是扩展性没有第二种强

线程控制

  • 启动(start)、暂停(suspend)、继续(resume)、停止(stop),销毁(destroy)
  • Thread的suspend(暂停),resume(继续)虽然可以使用,但是由于有死锁危险,被废弃。因为线程暂停时,并不释放线程所拥有的资源。
    • 解决方法:建议让线程暂停,等价于让线程结束运行。因为结束运行会释放资源;线程结束运行的标志:run函数运行完毕。线程继续相当于新开一个线程,在原来线程基础上运行。所以线程暂停时,要注意保护现场。
文章作者: EasonZzZz
文章链接: http://yoursite.com/2019/12/27/学习/Java学习/Java多线程开发/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Nice To Meet U