美文网首页
Java的多线程简单了解

Java的多线程简单了解

作者: 穿梭在围城 | 来源:发表于2018-11-14 17:10 被阅读0次

    Java中的多线程

    一、进程的概念

    • 进程:程序的执行过程,它持有资源(共享内存、共享文件)和线程

    • 执行过程:代表着动态性

    • 持有:代表着载体

    • 资源:代表内存

    二、线程的概念

    • 线程:是程序中最小的执行单元

    • 一个进程中可以有多个线程

    • 多个线程需要通信才能正常工作称之为线程的交互,交互的方式又分为两种:互斥(相互抢夺资源)和同步(相互配合)

    • 栗子(好好吃):进程可以类比班级,是学校的一个单元(windows上的一个程序);而线程就是班级里面的学生,是班级里面种最小的一个执行单元(线程),而上体育课(执行任务),打篮球的进攻双方互相抢夺篮球的控制权(互斥:多线程抢夺CPU的控制权),而攻守双方中的球员彼此不会抢夺己方的篮球控制权(同步:相互配合,不会想多CPU的控制权,只有等到篮球传递到自己的手上才会进行任务)。

    三、Java对线程的支持(创建以及常见方法)

    • 创建方式(4种)

      1. 继承Thread接口

      2. 实现Runnable接口

      3. 使用Callable和Future创建线程

      4. 通过线程池获取(Executor)

    • Tread的常用方法

    image.png
    • 线程的启动

      调用Thread的start()方法启动。

      一般这里会出现面试题:run()方法和start()方法的区别?

      调用run()方法只是单纯的调用了一个方法,而start()方法才是线程的正确启动方法。

    • 线程的结束

      Thread类中有一个stop()方法,但是!!!!!!这个stop方法并不推荐使用,究其根本是因为这个方法是Java1.0提供的,不是说他出现的早而不用,而是另有其他的原因:因为它会让我们的线程直接结束,就相当于至接拔掉电脑的电源,你都不知道线程执行到了什么地方和完成了什么任务,所以并不推荐这种方式来结束掉线程。

      正确的结束方式为:设置结束标志

    • 线程的同步

      同步锁、同步方法、同步代码块

      常见的面试题:wait()与sleep()的区别?
      • sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。 因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。
      • wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程

    相关文章

      网友评论

          本文标题:Java的多线程简单了解

          本文链接:https://www.haomeiwen.com/subject/vwijfqtx.html