java基础-多线程(1)

164 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天

线程实现

1.多任务

image-20220930202028874.png

现实中太多这样同时做多件事情的例子了,看起来是多个任务都在做,其实本质上我们的大脑在同一时间依旧只做了一件事情。

2.多线程

原来是一条路,慢慢因为车太多了,道路阻塞,效率极低。为了提高使用的效率,能够充分利用道路,于是加了多个车道。从此,妈妈再也不用担心道路阻塞了。

image-20220930202129488.png

image-20220930232702623.png

3.Thread和Proccess

thread: 线;细线,线状物;思路,贯穿的主线;(互联网留言板上的)同主题帖子,系列相关帖子;少量,较低水平;螺纹;<英,旧> 衣服;(计算机)线程,调度单位

prcocess: 步骤,程序;(自然或偶然的)变化过程;(为达到某目标的)过程,进程;制作方法,加工方法;<法律>传票;(生,剖)端突,突起

  1. 说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
  2. 而进程则是执行程序的依次执行过程,它是一个动态的概念。是系统资源分配的单位。
  3. 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位

注意: 很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错局。

4.核心概念

  • 线程就是独立的执行路径

  • 在程序运行时,即使没有自己创建线程,后台也会有多个线程,比如主线程,GC线程

  • main()称之为主线程,为系统的入口,用于执行整个程序

  • 在一个进程中,如果开辟了多个线程,线程的运行是由调度器(cpu)安排调度的,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的

  • 对同一份资源操作时mm会存在资源抢夺的问题,需要加入并发控制

  • 线程会带来额外的开销,如CPU调度时间,并发控制开销

  • 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致

    代码

     public class TestTread1 extends  Thread {
     ​
         @Override
         public void run() {
             //run方法线程体
             for (int i = 0; i < 20; i++) {
                 System.out.println("我在看代码。。。");
             }
         }
     ​
         //main线程,主线程
         public static void main(String[] args) {
              //创建一个线程对象
             TestTread1 testTread1 = new TestTread1();
             //调用start方法开启线程
             testTread1.start();
     ​
     ​
             for (int i = 0; i < 1000; i++) {
                 System.out.println("我在学习多线程。。。");
             }
         }
     }
    

    总结

    了解线程和进程的区别