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


    多线程

    一、并发与并行

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

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

    二、进程和线程

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

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

    三、线程调(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();
        }
    }
    
  • 相关阅读:
    C# 2.0 中Iterators的改进与实现原理浅析
    C#窗口关闭时最小化到托盘
    设计模式有趣解释
    序列化学习
    线程学习
    正则表达式
    .net内存回收与Dispose﹐Close﹐Finalize方法 [摘]
    5.匿名函数lambda
    2dns服务器解析创建
    2.ftp匿名
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700526.html
Copyright © 2020-2023  润新知