多线程编程②[Java]
多线程编程②[Java]
Jayfar多线程编程②[Java]
- 线程就是独立的执行路径
- 在程序运行时,即使没有自己创建线程,后台也会存在多个线程,如gc线程,主线程。
- main()称之为主线程,为系统的入口点,用于执行整个过程;
- 在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为的干预的;
- 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;
- 线程会带来额外的开销,如cpu调度时间,并发控制开销。
- 每个线程在自己的工作内存交互,加载和存储主内存控制不当会造成数据不一致。
创建线程的三种方式
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口
线程方法
- sleep()
- 使线程停止运行一段时间,将处于阻塞状态
- 如果调用了sleep方法之后,没有其他等待执行的线程,这个时候当前线程不会马上恢复执行!
- join()
- 阻塞指定线程等到另一个线程完成以后再继续执行。
- yield()
- 让当前正在执行线程暂停,不是阻塞线程,而是将线程转入就绪状态;
- 调用了yield方法之后,如果没有其他等待执行的线程,此时当前线程就会马上恢复执行!
- setDaemon()
- 可以将指定的线程设置成后台线程,守护线程;
- 创建用户线程的线程结束时,后台线程也随之消亡;
- 只能在线程启动之前把它设为后台线程
- setPriority(int newPriority) getPriority()
- 线程的优先级代表的是概率
- 范围从1到10,默认为5
- stop()停止线程
- 不推荐使用
- 继承Thread类
1 | package cn.Thread; |
多线程——抢票
多线程并发要考虑线程安全。
1 | package cn.Thread; |
模拟龟兔赛跑
1 | package cn.Thread; |
静态代理
1 | package cn.Thread; |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果