多线程复习

时间:2020-07-18 00:37:34   收藏:0   阅读:61

目录

一、线程与进程

二、java的线程使用

一、线程与进程

进程:系统运行的基本单元,当我们启动一个程序,就是一个进程从创建、运行到消亡的过程。进程可能会经历各种不同的状态,一般来说有三种状态。

状态转换: 就绪态的进程得到cpu调度就会变为执行状态,执行态的进程如果因为休眠或等待某种资源就会变为等待状态,执行态的进程如果时间片到了就会重新变为就绪状态放入就绪队列末尾,等待状态的进程如果得到除cpu以外的资源就会变为就绪状态注意处于等待状态的进程不能直接转变为执行状态,而首先要变为就绪状态,哪怕系统中只有一个进程。

技术图片

线程:线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。

技术图片

二、java的线程使用

2.1通过继承Thread使用

java程序可以有两种方式创建执行线程,一是通过继承该类来构建自己的线程类,Thread类是一个实现Runnable接口的原生类,二是直接实现Runnable接口来构建自己的线程类。
UserThreadOne.java

public class UserThread extends Thread {
    private String threadName;
    private int index;
    private static final int LOOP_NUM = 100;

    public UserThread() {
        this.threadName = "";
    }

    public UserThread(String name) {
        this.threadName = name;
        this.index = 0;
    }

    @Override
    public void run() {
        while (index < LOOP_NUM) {
            System.out.println(this.threadName + "执行次数:" + this.index++);
        }
    }
}

ThreadTest.java

public class ThreadTest {
    public static void main(String[] args) {
        UserThread threadA = new UserThread("线程A");
        UserThread threadB = new UserThread("线程B");
        threadA.start();
        threadB.start();
    }
}
执行结果:

技术图片

2.2通过实现Runnable使用

UserRunnable.java

public class UserRunnable implements Runnable {
    private String threadName;
    private int index;
    private static final int LOOP_NUM = 100;

    public UserRunnable() {
        this.threadName = "";
    }

    public UserRunnable(String name) {
        this.threadName = name;
        this.index = 0;
    }

    @Override
    public void run() {
        while (index < LOOP_NUM) {
            System.out.println(this.threadName + "执行次数:" + this.index++);
        }
    }
}

ThreadTest.java

public class ThreadTest {
    public static void main(String[] args) {
        /*UserThread threadA = new UserThreadOne("线程A");
        UserThread threadB = new UserThreadOne("线程B");*/
        UserRunnable runnableA= new UserRunnable("线程A");
        UserRunnable runnableB = new UserRunnable("线程B");
        Thread threadA = new Thread(runnableA);
        Thread threadB = new Thread(runnableB);
        threadA.start();
        threadB.start();
    }
}

技术图片

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!