首页 > 其他分享 >【博学谷学习记录】超强总结,用心分享。多线程重难点知识

【博学谷学习记录】超强总结,用心分享。多线程重难点知识

时间:2022-11-27 20:11:56浏览次数:44  
标签:调用 run 重难点 线程 超强 sleep 多线程 方法 wait

一、多线程

    1.1什么是线程?线程和进程的区别?

      线程:是进程的一个实体,是cpu调度和分派的基本单位,是比进程更小的可以独立运行的基本单位。

      进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。

      特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存单元互相独立,线程之间,内存共享,这使多线程编程可以拥有更好的性能和用户体验。

    

 

    1.2创建线程有几种方式?

      1)继承Thread类并重写run方法创建线程,实现简单但不可以继承其他类

      2)实现Runnable接口并重写run方法。避免了单继承局限性,编程更加灵活,实现解耦

      3)实现Callable接口并重写call方法,创建线程。可以获取线程执行结果的返回值,并且可以抛出异常。

 

 

      4)使用线程池创建(使用 java.util.concurrent.Executor 接口)

 

 

    1.3  Runnable和Callable的区别?

      1)Runnable接口run方法无返回值;Callable接口call方法有返回值,支持泛型

      2)Runnable接口run方法只能抛出运行时异常,且无法捕获处理;Callable接口call方法允许抛出异常,可以获取异常信息。

    

    1.4 如何启动一个新线程、调用start和run方法的区别?

 

 

      1)线程对象调用run方法不开启线程,仅是调用调用方法。

      2)线程对象调用start开启线程,并让jvm调用run方法在开启的线程中执行

      3)调用start方法可以启动线程,并且使得线程进入就绪状态,而run方法只是thread的一个普通方法,还是在主线程中执行。

    

    1.5 线程有哪几种状态以及各种状态之间的转换?

      1)第一种是new-》新建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态

      2)第二种是Runnable-》就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。

      3)第三是Running-》运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数中的代码,

      4)第四是阻塞状态。阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

          a.等待:通过调用线程的wait()方法,让线程等待谋工作的完成。

          b.超时等待:通过调用线程的sleep()或join()或发出I/O请求时,线程会进入阻塞状态。当sleep()状态超时、join()等待线程终止或超时、或者I/O处理完毕时,线程重新转入就绪状态。

          c.同步阻塞:线程在获取syncjronized同步锁失败(因为锁被其他线程所占用),它会进入同步阻塞状态。

      5)第五是dead-》死亡状态。线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

 

 

 

    1.6线程唤醒(notify)

      Object类中的notify()方法  ,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程,选择是任意的,并在对实现做出决定时发生,线程通过调用其中一个 wait() 方法,在对象的监视器上等待,直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程,被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争。类似的方法还有 notifyAll() ,唤醒再次监视器上等待的所有线程。 

    1.7 wait()和 sleep()的区别?

        来自不同的类

          wait():来自 Object 类; sleep():来自 Thread 类;

        关于锁的释放:

          wait():在等待的过程中会释放锁; sleep():在等待的过程中不会释放锁 3.使用的范围:

          wait():必须在同步代码块中使用; sleep():可以在任何地方使用;

         是否需要捕获异常 wait():不需要捕获异常; sleep():需要捕获异常;

           wait():不需要捕获异常;

           sleep():需要捕获异常;

       

标签:调用,run,重难点,线程,超强,sleep,多线程,方法,wait
From: https://www.cnblogs.com/linwenguan/p/16926737.html

相关文章

  • 21.多线程
    多线程程序同时执行多个任务使用线程可以把占据长时间的程序中的任务放到后台去处理。程序的运行速度可能加快线程实现方法线程是CPU分配资源的基本单位。当一程序......
  • C#的多线程机制探索1
    注:本文中出现的代码均在.netFrameworkRC3环境中运行通过一.多线程的概念Windows是一个多任务的系统,如果你使用的是windows2000及其以......
  • 浅谈C# Socket编程及C#如何使用多线程
    去年暑假学习了几个月asp.net最后几个星期弄了下C#socket.也算知道了个一知半解了,好久没动C#了,虽然这语言高级的让我对他没兴趣,不过还是回忆回忆,忘了一干二净就......
  • 今天将多线程的知识有回顾了下,总结了几点:
    新建一个线程(无参数,无返回值)Threadth=newThread(newpublicvoidPrintName()//函数{//函数体}这里一定注意ThreadStart中的函数是没有返回值和参数的那么......
  • c# 多线程
    usingusingusingusingnamespace{class{staticvoidMain(string[]args){"开始一个新的线程,名为次线程");newThread(newt.Start......
  • c#.net多线程编程教学(2):Thread类
    这章将向大家介绍.NET中的线程API,怎么样用C#创建线程,启动和停止线程,设置优先级和状态.在.NET中编写的程序将被自动的分配一个线程.让我们来看......
  • C#多线程点滴
     一、基本概念    进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。    线程......
  • lambda表达式的引用多线程
    两种方式调用多线程(及lambda使用)publicvoidThread(){    //正常使用多线程    newThread(newRunnable(){      @Override    ......
  • 【博学谷学习记录】超强总结,用心分享|狂野架构Spring核心组件补充
    Bean组件Bean组件定义在Spring的org.springframework.beans包下:是典型的工厂模式(BeanFactory)这个包下的所有类主要解决了三件事:Bean的定义:Bean的创建:Bean的赋值及初......
  • 从多线程模型理解并发
    学习完各种线程模型之后,试图从线程模型出发去理解设计者设计这些锁,多线程工具的时候的思想https://articles.zsxq.com/id_rk2jkvxq1n4d.htmlMESA管程模型提到多线程就......