ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础 -- 多线程(一)

2022-06-17 21:00:43  阅读:166  来源: 互联网

标签:run Thread -- 线程 进程 Java 多线程 sleep


Java基础 -- 多线程(一)

(多线程知识点)

1. 概念引入

  • 什么是程序、进程、线程?

    • 程序:静态源代码,指令集合
    • 进程:程序的一次执行过程,资源分配和调度的基本单位
    • 线程:轻量级进程,是进程的执行单元
  • 并发与并行的区别?

    • 并发:同一时刻,A和B同时发生
    • 并行:同一时间间隔,宏观上A和B同时发生,微观上二者交替运行
  • 为什么引入多线程?

    • 切换线程比切换进程负担小,切换上下文开销小
    • 提高程序的执行效率和运行速度
  • 引入多线程可能存在的问题?

    • 可能会引发线程安全,死锁等问题

【注】对于Java应用程序java.exe来说,最少存在三个线程:main()线程,gc()垃圾回收线程,异常处理线程;如果发生异常时,会影响主线程。

2. 创建启动线程

  • 线程的创建方式有哪些?

创建线程共有四种方式:

  • 继承Thread类(extends):继承类;重写run()方法;new Thread实例;start()启动线程

  • 实现Runnable接口(implements):实现Runnable接口,重写run()方法;创建实现类的实例;实例作为参数传到Thread类构造器,创建Thread类的对象;start()启动线程

  • 使用Callable,Future(implements):实现Callable接口;实现call() 方法;创建Callable接口实现类的对象;Callable实现类对象作为参数传到FutureTask构造器中,创建FutureTask对象;FutureTask对象作为参数传到Thread类构造器中,创建Thread对象;start()启动线程;获取Callable中call方法的返回值

  • 线程池:提供指定数量的线程池(ExecutorService,ThreadPoolExecutor);执行指定的线程的操作;关闭线程池

  • start(),run()和call()是什么?为什么不能调用run()?

    • run(): 线程执行体,代表线程需要完成的任务

    • start(): 启动当前进程,调用当前进程的run() 方法

    • call(): 功能类似于run() ,有返回值,可抛出异常

    • 若直接调用run()方法,就相当于调用一个普通方法,不会以多线程的方式执行

3. 线程声明周期

  • 线程生命周期是怎样的?

4. 控制线程

  • join() 是什么?

join():在线程a中调用线程b的join(),此时线程a进入阻塞状态,直到线程b完全执行之后,线程a才结束阻塞状态

总结:线程a中调用b.join(),代表线程a等线程b完成后结束阻塞

  • 后台进程是什么?

后台进程,也叫守护进程,指的是后台运行,为其他线程提供服务;如果前台线程死亡,后台线程自动死亡

  • sleep()是什么?

让线程暂停,进入阻塞状态

  • yield() 是什么

让线程暂停,进入就绪状态而非阻塞状态

  • yield() 与 sleep() 区别?

  • 线程优先级情况是怎样的?

    • 线程默认优先级与父线程优先级相同

    • main() 线程普通优先级

    • 静态常量

  • 常见问题:sleep() 和 wait() 异同

    • 相同点:二者都可以暂停线程执行

    • 不同点:

      • sleep()没有释放锁;wait() 释放了锁

      • sleep() 用于暂停执行;wait() 用于线程通信

      • sleep()执行后,会自动苏醒;wait()执行后,需要调用notify()/notifyAll()唤醒,或者是wait(long timeout) 超时后线程会自动苏醒

5. 参考资料

https://mp.weixin.qq.com/s?__biz=MzU4NzA3MTc5Mg==&mid=2247484036&idx=1&sn=75e9e93a82a811e9c71b8127cf7ac677&chksm=fdf0eadbca8763cd7ab74757f9472d061c0244d2373a1ea85b1cbc833941441fdb1e91ead5b4&scene=21&cur_album_id=1657204970858872832#wechat_redirect

标签:run,Thread,--,线程,进程,Java,多线程,sleep
来源: https://www.cnblogs.com/Claire-is-here/p/16387036.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有