zoukankan      html  css  js  c++  java
  • 多线程第二十三天,多线程

    多线程

    一、并发与并行

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

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

    二、进程和线程

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

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

    三、线程调(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();
        }
    }
    
  • 相关阅读:
    CxImage图像库的使用
    CxImage动态加载图片(判断图片文件类型)
    实现一个类似360的button
    cximage功能简介
    开源图像处理软件代码
    MFC + CxImage 实现自绘半透明按钮
    VC 下加载 JPG / JPEG / GIF / PNG 图片最简单的方法
    时序数据库InfluxDB:简介及安装
    学习springboot整合mybatis并编写测试类
    Mybatis-Plus使用全解
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700526.html
Copyright © 2011-2022 走看看