多线程第二十三天,多线程

多线程

一、并发与并行

并发:指两个或多个事件在同一个时间段内发生(交替执行)。

并行:指两个或多个事件在同一时刻发生(同时执行)。

二、进程和线程

进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程。进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。

线程:线程是进程中的一个执行单元。负责当前进程中程序的执行。一个进程至少有一个线程。一个进程中可以有多个线程即多线程程序。

三、线程调(diao)度

1.分时调度:

所有线程轮流使用CPU,平均分配每个线程占用CPU的时间。

2.抢占式调度:

优先让优先级高的线程使用CPU。

四、主线程

Java中主线程是指执行主方法(main)的线程。

五、多线程

1.创建方法

创建多线程有两种方法。

(1)将类声明为Thread类的子类。该子类应该重写Thread的run()方法。

(2)将类声明实现Runnable接口。该类应该实现run()方法。然后将此类对象作为Thread类构造函数的一个参数。最后调用Thread对象的start()方法实现多线程。

2.常用方法

(1)获取当前线程的名称。

① 在继承Thread类的自定义线程类中使用getName()方法可以获取当前线程的名称。

② Thread.currentThread()方法是一个静态方法,可以获取到当前线程的实例对象,然后利用线程的getName()方法可以获取到当前线程名称。

(2)设置当前线程的名称。

① 利用Thread类中的setName(String name)设置线程名称。

② 利用Thread类带参构造函数设置线程名称。

(3)如何让当前线程“休眠”指定一段事件。

Thread类有一个静态方法——sleep

3.示列代码:

package com.lanyue.day22;

public class Car extends Thread {

    public Car(String name){

        super(name);
    }

    @Override
    public void run(){

        for(int i = 0;i < 5;i++){

            try{

                Thread.sleep(1000);

            }catch (Exception e){

                System.out.println("发生异常");
            }
            System.out.println(getName() + "已经行走了" + i + "km路程===>[" + Thread.currentThread().getName() + "]");
        }
    }
}
package com.lanyue.day22;

public class Driver implements Runnable {
    @Override
    public void run() {

        for(int i = 0;i < 5;i++){

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("第一个司机第" + i + "次报数中。");
        }
    }
}
package com.lanyue.day22;

public class Person {

    public static void main(String[] args) {

        Car one = new Car("宝马");

        one.start();

        Driver two = new Driver();
        new Thread(two).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0;i < 5;i++){

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("第二个司机第" + i + "次报数中。");
                }
            }
        }).start();
    }
}
原文地址:https://www.cnblogs.com/viplanyue/p/12700526.html