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) 编辑 收藏 举报