zoukankan      html  css  js  c++  java
  • Java 线程基础 -- 创建新线程与线程的状态

    多线程基础

    进程和线程的关系就是:一个进程可以包含一个或多个线程,但至少会有一个线程。

    操作系统调度的最小任务单位其实不是进程,而是线程。

    实现多任务的三种方法:

    • 多进程,每个进程只有一个线程

    • 多线程,一个进程有多个线程

    • 多进程 + 多线程

    进程与线程的优缺点

    和多线程相比,多进程的缺点在于:

    • 创建进程比创建线程开销大,尤其是在Windows系统上;

    • 进程间通信比线程间通信要慢,因为线程间通信就是读写同一个变量,速度很快。

    多进程的优点在于:

    • 多进程稳定性比多线程高,因为在多进程的情况下,一个进程崩溃不会影响其他进程,而在多线程的情况下,任何一个线程崩溃会直接导致整个进程崩溃。

    多线程

    JAVA 语言内置了多线程支持:一个 Java 程序实际上就是一个 JVM 进程。

    JVM 进程用一个主线程来执行 main() 方法,在 main() 方法内部,我们又可以启动多个线程。

    因此,对于大多数 Java 程序来说,我们说多任务,实际上是说如何使用多线程实现多任务。

    java 多线程编程的特点:

    • 多线程模型是 java 程序最基本的并发模型

    • 读写网络、数据库、web开发等都依赖 java 多线程模型

    创建新线程

    创建一个新线程需要实例化一个 Thread 实例,然后调用它的start() 方法:

    public class Main {
        public static void main(String[] args){
            Thread thread = new Thread();
            thread.start(); //启动新线程
        }
    }
    

    但是这个线程启动后实际上什么也不做就立刻结束了。我们希望新线程能执行指定的代码。

    具体方法如,从Thread派生一个自定义类,然后覆写run()方法:

    public class Main {
        public static void main(String[] args) {
            Thread t = new MyThread();
            t.start(); // 启动新线程
        }
    }
    
    class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println("start new thread!");
        }
    }
    

    当使用t.start()启动新线程时,会在内部自动调用实例的run()方法。

    线程的状态

    在 Java 程序中,一个线程对象只能调用一次 start() 方法启动新线程,并在新线程中执行 run() 方法。一旦 run() 方法执行完毕,线程就结束了。

    因此,Java线程的状态有以下几种:

    • New:新创建的线程,尚未执行;

    • Runnable:运行中的线程,正在执行run()方法的Java代码;

    • Blocked:运行中的线程,因为某些操作被阻塞而挂起;

    • Waiting:运行中的线程,因为某些操作在等待中;

    • Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待;

    • Terminated:线程已终止,因为run()方法执行完毕。

    通过对另一个线程对象调用 join() 方法可以等待其执行结束;

    每天学习一点点,每天进步一点点。

  • 相关阅读:
    C#设计模式总结
    【23】备忘录模式(Memento Pattern)
    【22】访问者模式(Visitor Pattern)
    mycat 分库
    mysql的存储过程
    mysql的视图
    mysql的索引
    mysql权限操作
    mysql事务操作
    mysql常用函数
  • 原文地址:https://www.cnblogs.com/youcoding/p/13405880.html
Copyright © 2011-2022 走看看