• Java多线程的知识点


     

    🌱🌱友友们大家好 我是你们的小王同学啊

    今天给大家带来的是 java多线程的知识点

    希望大家能支持小王 喜欢就给个三连吧

    你们的三连是我制作的动力!💗💗

    小王的gitee:小王同学🍰

    小王的github:小王同学🍖

    1.并发与并行🌭 

    并发:

    •  指两个或多个事件在同一个时间段内发生。

    并行:

    • 并行:指两个或多个事件在同一时刻发生(同时发生)。 

     2.线程与进程🌭

    进程:🍔

    • 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。

     

    线程:🍔 

    • 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

     

    线程的创建🌭 

    构造方法:🍔

    • public Thread() :分配一个新的线程对象。
    • public Thread(String name) :分配一个指定名字的新的线程对象。
    • public Thread(Runnable target) :分配一个带有指定目标新的线程对象。
    • public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并指定名字。

    一些常见的方法:🍔

    • public String getName() :获取当前线程名称。
    • public void start() :导致此线程开始执行; Java虚拟机调用此线程的run方法。
    • public void run() :此线程要执行的任务在此处定义代码。
    • public static void sleep(long millis) :使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
    • public static Thread currentThread() :返回对当前正在执行的线程对象的引用。

     

    wait()方法🌭

    1. wait方法的作用就是使当前执行的代码进行等待,wait()方法就是Object类的方法,该方法是用来将当前线程置入"预执行队列中",并且在wait方法()所在的代码处停止执行,直到接到通知或被中断中止
    2. wait方法只能在同步方法中或同步块中调用。如果调用的wait时,没有持有适当的锁,会抛出异常。
    3. wait()方法执行后,当前线程释放锁,线程与其它线程竞争重新获取锁。
       

    notify() 方法🌭

    notify方法就是使停止的线程继续运行

    1. 方法notify()也要在同步方法或同步块中调用,该方法是用来通知那些可能等待该对象的对象锁的其它线程,对其发出通知notify,并使它们重新获取该对象的对象锁。如果有多个线程等待,则有线程规划器随机挑选出一个呈wait状态的的线程。
    2. notify()方法后,当前线程不会马上释放该对象锁,要等到执行notify()方法的线程将程序执行完,也就是退出同步代码块之后才会释放对象锁。

     查看线程的运行状态🌭

    线程有六种状态分别是:新建、运行、阻塞、等待、计时等待和终止

    实现思路:🌭

    • 创建一个类;ThreadState,实现Runnable接口
    • 定义三个方法:
      • .waitForASecond():使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法
         .waitForYears();使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法
         .notifyNow():唤醒由调用wait方法()进入等待状态的线程

    代码实现🌭 

    1. package cn.xiaoxuzhu.daily;
    2. /**
    3. * @author 小王同学;
    4. * @version 1.0.0
    5. * Description:
    6. *
    7. * 1.题目描述:
    8. * 题目:线程有6个状态:新建,运行,阻塞,等待,计时,等待和终止
    9. * new新进程时,线程处于新建状态。
    10. * 调用start()方法,线程处于运行状态
    11. * 对于一些含有时间参数的方法如Thread类的sleep方法();可以使线程处于计时等待状态
    12. * 当run()方法运行完毕或出现异常时,线程处于终止状态。
    13. * 实现:查看线程的运行状态。
    14. *
    15. * 2.解题思路:
    16. * 创建一个类;ThreadState,实现Runnable接口
    17. *
    18. * 定义三个方法
    19. * .waitForASecond():使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法
    20. * .waitForYears();使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法
    21. * .notifyNow():唤醒由调用wait方法()进入等待状态的线程
    22. *
    23. * 使用Thread类的getState()方法,可以获得线程的状态
    24. * 该方法的返回值是Thread.state
    25. *
    26. */
    27. public class ThreadState implements Runnable{
    28. public synchronized void waitForASecond()throws InterruptedException{
    29. wait(500); //使当前线程等待0.5秒或其他线程调用notify()或者notifyAll()方法
    30. }
    31. public synchronized void waitForYears()throws InterruptedException{
    32. wait(); //使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法
    33. }
    34. public synchronized void notifyNow()throws InterruptedException{
    35. notify(); //唤醒由调用wait方法()进入等待状态的线程
    36. Thread.sleep(100); //留时间打印
    37. }
    38. @Override
    39. public void run() {
    40. try {
    41. waitForASecond(); //在新线程中运行waitForASecond();方法
    42. waitForYears(); //在新线程中运行waitForYears()方法
    43. }catch (InterruptedException e){
    44. e.printStackTrace();
    45. }
    46. }
    47. }
    1. package cn.xiaoxuzhu.daily;
    2. public class _67 {
    3. public static void main(String[] args) throws InterruptedException {
    4. ThreadState state=new ThreadState(); //创建state对象
    5. Thread thread=new Thread(state); //利用state对象创建Thread对象
    6. System.out.println("新建线程:"+thread.getState()); //输出线程状态
    7. thread.start(); //调用thread对象的start()方法,启动新线程
    8. System.out.println("启动线程:"+thread.getState()); //输出线程状态
    9. Thread.sleep(100);//当前线程休眠0.1秒,使新线程运行waitForASecond()方法
    10. System.out.println("计时等待:"+thread.getState()); //输出线程状态
    11. Thread.sleep(1000);//当前线程休眠1秒,使新线程运行waitForYears()方法
    12. System.out.println("等待线程:"+thread.getState());//输出线程状态
    13. state.notifyNow();//调用state的notifyNow()方法
    14. System.out.println("唤醒线程:"+thread.getState());//输出线程状态
    15. Thread.sleep(1000);;//当前新线程休眠1秒,使新线程结束
    16. System.out.println("终止线程:"+thread.getState()); //输出进程状态

     

       

    以上就是 小王同学带给大家的多线程基础知识

    觉得小王写的不错的话麻烦三连奉上

    谢谢你们这么好看还关注我!💦💦

      

  • 相关阅读:
    SpringCloud案例day05
    flinksql 流表转换, 自定义udf/udtf,SQL 内置函数及自定义函数
    手写分布式配置中心(二)实现分布式配置中心的简单版本
    移动端echarts图表的自适应使用
    leetcode最长递增子序列
    【计算机网络笔记四】应用层(一)DNS域名解析
    YOLOv5 PyQt5 | PyQt5环境配置及组件介绍 | 1/3
    大数据+大模型的尽头——数据分析师的未来会怎样?
    6.2二叉树的迭代遍历(LC144,LC145,LC94-E)
    javaScript 计算以过去的时间
  • 原文地址:https://blog.csdn.net/weixin_59796310/article/details/125023114