当前位置: 首页 > news >正文

Java并发编程(六)

1、java 中有几种方法可以实现一个线程

  • 继承 Thread 类
  • 实现 Runnable 接口
  • 实现 Callable 接口,需要实现的是 call() 方法

2、如何停止一个正在运行的线程

使用共享变量的方式

在这种方式中,之所以引入共享变量,是因为该变量可以被多个执行相同任务的线程用来作为是否中断的信号,通知中断线程的执行

使用 interrupt 方法终止线程

如果一个线程由于等待某些事件的发生而被阻塞,又该怎样停止该线程呢?这种情况经常会发生,比如当一个线程由于需要等候键盘输入而被阻塞,或者调用Thread.join()方法,或者 Thread.sleep()方法,在网络中调用ServerSocket.accept()方法,或者调用了 DatagramSocket.receive()方法时,都有可能导致线程阻塞,使线程处于处于不可运行状态时,即使主程序中将该线程的共享变量设置为 true,但该线程此时根本无法检查循环标志,当然也就无法立即中断。这里我们给出的建议是,不要使用 stop()方法,而是使用 Thread 提供的interrupt()方法,因为该方法虽然不会中断一个正在运行的线程,但是它可以使一个被阻塞的线程抛出一个中断异常,从而使线程提前结束阻塞状态,退出堵塞代码。

3、notify()和 notifyAll()有什么区别

当一个线程进入 wait 之后,就必须等其他线程 notify/notifyall,使用 notifyall,可以唤醒所有处于 wait 状态的线程,使其重新进入锁的争夺队列中,而 notify 只能唤醒一个。

如果没把握,建议 notifyAll,防止 notigy 因为信号丢失而造成程序异常。

4、什么是 Daemon 线程?它有什么意义

所谓后台(daemon)线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这个线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。反过来说,只要有任何非后台线程还在运行,程序就不会终止。必须在线程启动之前调用setDaemon()方法,才能把它设置为后台线程。注意:后台进程在不执行 finally子句的情况下就会终止其 run()方法。

比如:JVM 的垃圾回收线程就是 Daemon 线程,Finalizer 也是守护线程。

5、什么是可重入锁(ReentrantLock)

举例来说明锁的可重入性

public class UnReentrant{Lock lock = new Lock();public void outer(){lock.lock();inner();lock.unlock();}public void inner(){lock.lock();//do somethinglock.unlock();}
}

outer 中调用了 inner,outer 先锁住了 lock,这样 inner 就不能再获取 lock。其实调用 outer 的线程已经获取了 lock 锁,但是不能在 inner 中重复利用已经获取的锁资源,这种锁即称之为 不可重入可重入就意味着:线程可以进入任何一个它已经拥有的锁所同步着的代码块。

synchronized、ReentrantLock 都是可重入的锁,可重入锁相对来说简化了并发编程的开发。

http://www.lryc.cn/news/425704.html

相关文章:

  • k8s对外服务之Ingress
  • 使用Python+moviepy在视频画面上绘制边框
  • 灵办AI探索之旅:颠覆传统的代码开发工具
  • 【Redis】Redis 数据类型与结构—(二)
  • Tomcat初篇
  • 机器学习(2)-- KNN算法之手写数字识别
  • 【机器人】关于钉钉机器人如何进行自定义开发问答【详细清晰】
  • Qt:exit,quit,close的用法及区别
  • Linux——进程地址空间
  • 信创(国产化)方案
  • EasyRecovery17中文版永久汉化版电脑数据恢复工具下载
  • Cesium倾斜相机视角观察物体
  • C/C++开发---全篇
  • Android全面解析之context机制(二): 从源码角度分析context创建流程(上)
  • WPS真题题库导入刷题小程序:百思考个人使用经验分享
  • 拯救者双系统问题 Verifiying shim SBAT data failed: Security Policy Violation
  • ThreeJs学习笔记--坐标系,光源,相机控件
  • 基于 Android studio 实现停车场管理系统--原创
  • 8 个最佳 Java IDE 和文本编辑器
  • 【2024最新版版】PyCharm安装教程
  • 奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?
  • Java进阶篇之包的概念及其应用
  • 短剧出海,赚钱新途径,掌握海外短剧CPS分销的秘诀
  • uniapp小程序openid和unionId
  • 前端工程化-04.Vue项目简介
  • 10 Checkbutton 组件
  • 获奖方案|趋动科技:资源池化释放AI算力价值
  • Gin框架接入pyroscope完美替代pprof实现检测内存泄露
  • 记录一个lombok和mybatisplus的问题,@Data注解失效
  • React学习-初始化react项目