java 多线程:Thread类;Runnable接口

1,进程和线程的基本概念:

1.什么是进程:
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。(百度百科)
进程其实就是我们计算机上正在运行的程序。
 
2.什么是线程:
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
 
3.什么是多线程:
(1),概念:通俗的来说,多线程就是指多个线程并发执行的情况。
(2),原理:
多线程是如何做到的:
CPU把一段时间划分为多个很小的时间片段,然后让每个线程获得这些片段的执行权限,由于CPU的速度非常快,所以给人的感觉就像是同时运行一样。现在的计算机,的确是可以做到同时运行的,为什么呢?因为现在的计算机大多数都是多核的。
 

2、java中多线程的使用:Thread

构造:

  • new Thread()

启动一个新的线程:

  • .start()

常用方法:

  • Thread.currentThread().getName() //获取当前线程的名字

 

/**
 * @ClassName MyThreadExample
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/4/19.
 */
public class MyThreadExample {
    private static class MyFirstThread extends Thread{
        //自己写个线程,重写run()方法
        @Override
        public void run() {
            System.out.println("MyFirstThread运行中:名字是:" + Thread.currentThread().getName());
        }
    }
    public static void main(String[] args) {
        MyFirstThread myFirstThread = new MyFirstThread();
        myFirstThread.run();//在当前线程中调用run()方法;不会产生新的线程
        myFirstThread.start();
        System.out.println("main方法中运行的线程名字:" + Thread.currentThread().getName());
        /**
         * 运行输出:
         * main方法中运行的线程名字:main
         * MyFirstThread运行中:名字是:Thread-0
         */
    }
}
线程运行具有随机性:

 可以看出每次运行顺序不一样

线程的运行具有随机性。为什么是这样?那我们来讲讲调用了start()方法之后,产生了什么:
  • (1),调用start()之后,程序会通知我们的JVM,告诉jvm我已经准备好了,可以运行了。
  • (2),Jvm异步的调用我们的线程对应的run()方法。
  • (3),Jvm什么时候运行我们的run()方法,这个是程序员没法控制的(其实呢,还是可以相对的控制,这个之后讲,但是,你要做到绝对的控制它马上运行,还是不行)
  • (4),start()方法的调用顺序,不代表线程的run()方法的运行顺序。

 

3、Thread实现了Runnable接口,通过实现Runnable接口的方式来实现一个线程

 Thread 类实现了Runnable接口,该接口只有有一个抽象方法run()

  Thread 类构造方法可以传入一个Runnable接口实现类来构造线程实例:

 

 示例代码:

/**
 * @ClassName UseRunnableThread
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/4/19.
 */
public class UseRunnableThread {
    private static class MyRunnableThread implements Runnable {

        @Override
        public void run() {
            System.out.println("MyRunnableThread" + Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnableThread());
        //lambda 表达式方式构造线程方法
        Thread thread1 = new Thread(()->System.out.println("Lambda表达式构建的线程,匿名内部类对象:" + Thread.currentThread().getName()) );
        thread.start();
        thread1.start();
        System.out.println("main方法运行的线程:" + Thread.currentThread().getName());
        /**
         * 运行输出:
         * Lambda表达式构建的线程,匿名内部类对象:Thread-1
         * MyRunnableThreadThread-0
         * main方法运行的线程:main
         */
    }
}

 

 
 
 

posted on 2021-04-19 16:32  zhangmingda  阅读(220)  评论(0编辑  收藏  举报

导航