网站建设公司联系方式北京网站开发周期

news/2025/10/9 12:40:19/文章来源:
网站建设公司联系方式,北京网站开发周期,给wordpress首页添加公告栏,软文是什么文章很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework)#xff0c;理解核心线程概念时#xff0c;娴熟的实际经验是必需的。这篇文章收集了 Java 线程方面一些典型的问题#xff0c;这些问题经常被高级工程师所问到。 0.Java 中多线程同步是什…很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework)理解核心线程概念时娴熟的实际经验是必需的。这篇文章收集了 Java 线程方面一些典型的问题这些问题经常被高级工程师所问到。 0.Java 中多线程同步是什么 在多线程程序下同步能控制对共享资源的访问。如果没有同步当一个 Java 线程在修改一个共享变量时另外一个线程正在使用或者更新同一个变量这样容易导致程序出现错误的结果。 1.解释实现多线程的几种方法? 一 Java 线程可以实现 Runnable 接口或者继承 Thread 类来实现当你打算多重继承时优先选择实现 Runnable。 2.Thread.start ()与 Thread.run ()有什么区别 Thread.start ()方法(native)启动线程使之进入就绪状态当 cpu 分配时间该线程时由 JVM 调度执行 run ()方法。 3.为什么需要 run ()和 start ()方法我们可以只用 run ()方法来完成任务吗 我们需要 run ()start ()这两个方法是因为 JVM 创建一个单独的线程不同于普通方法的调用所以这项工作由线程的 start 方法来完成start 由本地方法实现需要显示地被调用使用这俩个方法的另外一个好处是任何一个对象都可以作为线程运行只要实现了 Runnable 接口这就避免因继承了 Thread 类而造成的 Java 的多继承问题。 4.什么是 ThreadLocal 类怎么使用它 ThreadLocal 是一个线程级别的局部变量并非“本地线程”。ThreadLocal 为每个使用该变量的线程提供了一个独立的变量副本每个线程修改副本时不影响其它线程对象的副本(译者注)。 下面是线程局部变量(ThreadLocal variables)的关键点 一个线程局部变量(ThreadLocal variables)为每个线程方便地提供了一个单独的变量。 ThreadLocal 实例通常作为静态的私有的(private static)字段出现在一个类中这个类用来关联一个线程。 当多个线程访问 ThreadLocal 实例时每个线程维护 ThreadLocal 提供的独立的变量副本。 常用的使用可在 DAO 模式中见到当 DAO 类作为一个单例类时数据库链接(connection)被每一个线程独立的维护互不影响。(基于线程的单例) ThreadLocal 难于理解下面这些引用连接有助于你更好的理解它。 《Good article on ThreadLocal on IBM DeveloperWorks 》、《理解 ThreadLocal》、《Managing data : Good example》、《Refer Java API Docs》 5.什么时候抛出 InvalidMonitorStateException 异常为什么 调用 wait ()/notify ()/notifyAll ()中的任何一个方法时如果当前线程没有获得该对象的锁那么就会抛出 IllegalMonitorStateException 的异常(也就是说程序在没有执行对象的任何同步块或者同步方法时仍然尝试调用 wait ()/notify ()/notifyAll ()时)。由于该异常是 RuntimeExcpetion 的子类所以该异常不一定要捕获(尽管你可以捕获只要你愿意).作为 RuntimeException此类异常不会在 wait (),notify (),notifyAll ()的方法签名提及。 6.Sleep ()、suspend ()和 wait ()之间有什么区别 Thread.sleep ()使当前线程在指定的时间处于“非运行”Not Runnable状态。线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中其它线程不能进入该块或方法中。如果另一线程调用了 interrupt ()方法它将唤醒那个“睡眠的”线程。 注意sleep ()是一个静态方法。这意味着只对当前线程有效一个常见的错误是调用t.sleep ()这里的t是一个不同于当前线程的线程。即便是执行t.sleep ()也是当前线程进入睡眠而不是t线程。t.suspend ()是过时的方法使用 suspend ()导致线程进入停滞状态该线程会一直持有对象的监视器suspend ()容易引起死锁问题。 object.wait ()使当前线程出于“不可运行”状态和 sleep ()不同的是 wait 是 object 的方法而不是 thread。调用 object.wait ()时线程先要获取这个对象的对象锁当前线程必须在锁对象保持同步把当前线程添加到等待队列中随后另一线程可以同步同一个对象锁来调用 object.notify ()这样将唤醒原来等待中的线程然后释放该锁。基本上 wait ()/notify ()与 sleep ()/interrupt ()类似只是前者需要获取对象锁。 7.在静态方法上使用同步时会发生什么事 同步静态方法时会获取该类的“Class”对象所以当一个线程进入同步的静态方法中时线程监视器获取类本身的对象锁其它线程不能进入这个类的任何静态同步方法。它不像实例方法因为多个线程可以同时访问不同实例同步实例方法。 8.当一个同步方法已经执行线程能够调用对象上的非同步实例方法吗 可以一个非同步方法总是可以被调用而不会有任何问题。实际上Java 没有为非同步方法做任何检查锁对象仅仅在同步方法或者同步代码块中检查。如果一个方法没有声明为同步即使你在使用共享数据 Java 照样会调用而不会做检查是否安全所以在这种情况下要特别小心。一个方法是否声明为同步取决于临界区访问(critial section access)如果方法不访问临界区(共享资源或者数据结构)就没必要声明为同步的。 下面有一个示例说明Common 类有两个方法 synchronizedMethod1()和 method1()MyThread 类在独立的线程中调用这两个方法。 public class Common {     public synchronized void synchronizedMethod1() {  System.out.println (synchronizedMethod1 called);  try {  Thread.sleep (1000);  } catch (InterruptedException e) {  e.printStackTrace ();  }  System.out.println (synchronizedMethod1 done);  }  public void method1() {  System.out.println (Method 1 called);  try {  Thread.sleep (1000);  } catch (InterruptedException e) {  e.printStackTrace ();  }  System.out.println (Method 1 done);  }  }  public class MyThread extends Thread {  private int id  0;  private Common common;     public MyThread (String name, int no, Common object) {  super(name);  common  object;  id  no;  }     public void run () {  System.out.println (Running Thread  this.getName ());  try {  if (id  0) {  common.synchronizedMethod1();  } else {  common.method1();  }  } catch (Exception e) {  e.printStackTrace ();  }  }     public static void main (String[] args) {  Common c  new Common ();  MyThread t1  new MyThread (MyThread-1, 0, c);  MyThread t2  new MyThread (MyThread-2, 1, c);  t1.start ();  t2.start ();  }  }   这里是程序的输出 Running ThreadMyThread-1  synchronizedMethod1 called  Running ThreadMyThread-2  Method 1 called  synchronizedMethod1 done  Method 1 done  结果表明即使 synchronizedMethod1()方法执行了method1()也会被调用。 9.在一个对象上两个线程可以调用两个不同的同步实例方法吗 不能因为一个对象已经同步了实例方法线程获取了对象的对象锁。所以只有执行完该方法释放对象锁后才能执行其它同步方法。看下面代码示例非常清晰Common 类有 synchronizedMethod1()和 synchronizedMethod2()方法MyThread 调用这两个方法。 public class Common {  public synchronized void synchronizedMethod1() {  System.out.println (synchronizedMethod1 called);  try {  Thread.sleep (1000);  } catch (InterruptedException e) {  e.printStackTrace ();  }  System.out.println (synchronizedMethod1 done);  }     public synchronized void synchronizedMethod2() {  System.out.println (synchronizedMethod2 called);  try {  Thread.sleep (1000);  } catch (InterruptedException e) {  e.printStackTrace ();  }  System.out.println (synchronizedMethod2 done);  }  }  public class MyThread extends Thread {  private int id  0;  private Common common;     public MyThread (String name, int no, Common object) {  super(name);  common  object;  id  no;  }     public void run () {  System.out.println (Running Thread  this.getName ());  try {  if (id  0) {  common.synchronizedMethod1();  } else {  common.synchronizedMethod2();  }  } catch (Exception e) {  e.printStackTrace ();  }  }     public static void main (String[] args) {  Common c  new Common ();  MyThread t1  new MyThread (MyThread-1, 0, c);  MyThread t2  new MyThread (MyThread-2, 1, c);  t1.start ();  t2.start ();  }  }  10.什么是死锁 死锁就是两个或两个以上的线程被无限的阻塞线程之间相互等待所需资源。这种情况可能发生在当两个线程尝试获取其它资源的锁而每个线程又陷入无限等待其它资源锁的释放除非一个用户进程被终止。就 JavaAPI 而言线程死锁可能发生在一下情况。 当两个线程相互调用 Thread.join ()当两个线程使用嵌套的同步块一个线程占用了另外一个线程必需的锁互相等待时被阻塞就有可能出现死锁。 11.什么是线程饿死什么是活锁 线程饿死和活锁虽然不想是死锁一样的常见问题但是对于并发编程的设计者来说就像一次邂逅一样。 当所有线程阻塞或者由于需要的资源无效而不能处理不存在非阻塞线程使资源可用。JavaAPI 中线程活锁可能发生在以下情形 当所有线程在程序中执行 Object.wait (0)参数为 0 的 wait 方法。程序将发生活锁直到在相应的对象上有线程调用 Object.notify ()或者 Object.notifyAll ()。当所有线程卡在无限循环中。 这里的问题并不详尽我相信还有很多重要的问题并未提及您认为还有哪些问题应该包括在上面呢欢迎在评论中分享任何形式的问题与建议。 译文出自jobbole 英文出自fromdev

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hyper-v 安装 Android9

选第一代 硬盘后续添加vhd格式的

网站每年多少钱wordpress怎样建立多站点

一 压力测试的目的 评估系统的能力识别系统的弱点:瓶颈/弱点检查系统的隐藏的问题检验系统的稳定性和可靠性 二 性能测试指标以及测算 【虚拟用户数】:线程用户【并发数】:指在某一时间,一定数量的虚拟用户同时对系统的某个功…

河南app手机网站制作合肥有多少建网站公司

欧冠16强抽签揭晓,结果:多特VS巴黎,皇马VS曼城,亚特兰大VS瓦伦西亚,马竞VS利物浦,切尔西VS拜仁,里昂VS尤文图斯,热刺VS莱比锡,那不勒斯VS巴萨。怎么评价这样的抽签呢&…

计算机毕业设计springboot制氢领域文献管理强大的系统 基于SpringBoot的氢能研究文献管理平台 面向制氢技能的文献资料管理系统设计与实现

计算机毕业设计springboot制氢领域文献管理强大的系统 基于SpringBoot的氢能研究文献管理平台 面向制氢技能的文献资料管理系统设计与实现2025-10-09 12:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space:…

网站分析报告范文2000产品开发流程管理

var A {a:1,b:2,c:3,d:"hello world"};for(var k in A) {console.log(k,A[k]);var h new EJS({element:ejs_render_id}).render(render);}return;转载于:https://www.cnblogs.com/pansidong/p/8708245.html

数论上

目录数论上前言模运算基本概念基础性质基础运算除法逆元除法的一般情况次幂(欧拉定理)费马小定理&欧拉定理原根与阶对数(BSGS)开根(二次剩余) 数论上 前言 叠甲:本文的许多定义并不是最官方严谨的,但是其实…

数论中

目录数论中前言一些定理欧几里得算法全家桶中国剩余定理及其拓展(CRT)威尔逊定理及逆定理拉格朗日定理(没有用,不需要讲) 数论中 前言 叠甲:本文的许多定义并不是最官方严谨的,但是其实是本质相同的,不过更偏实…

Vue 3 + TypeScript 中 QCarousel 模板引用类型错误解决方案

Vue 3 + TypeScript 中 QCarousel 模板引用类型错误解决方案Vue 3 + TypeScript 中 QCarousel 模板引用类型错误解决方案 一、问题描述 在 Vue 3 + TypeScript 项目中使用 Quasar 的QCarousel组件时,通过$refs.carous…

网站建设心得.doc广告设计好找工作吗

LinkedList 是 Java 中的一个双向链表实现的类,它实现了 List 接口,同时也实现了 Deque 接口,因此可以用作列表、队列或双端队列。下面是关于 LinkedList 的基本介绍和细节讨论: 基本介绍: LinkedList 是一个双向链表…

数论下

目录数论下前言因数与数论函数基础基础概念与定义整数唯一分解定理/算术基本定理素数判定/分解质因数/得到约数数论分块(整除分块)数论函数相关积性函数筛法埃氏筛欧拉筛杜教筛Powerful Number筛Min_25筛洲阁筛莫比乌…

赌狗确实很爽,也确实很容易上天台

正文 一、赌博为什么这么爽?赌博的时候,大脑会释放大量的多巴胺,这种神经递质会让人产生强烈的快感。而且,这种快感不是在赢钱的时候才有,而是在下注的那一刻就开始了。就像你买彩票的时候,在开奖之前,你会幻想…

微信网页宣传网站怎么做免费ai写作网站3000字

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼就下面这个程序 输入其他的数字都可以算出面积 但是当输入3,4,6时 计算出面积为零 求吧友指出错误在哪package javaapplication17;import java.util.Scanner;public class JavaApplication17 {public static void main(String[] ar…

ZYNQ xapp585 lvds 文档阅读 (三)

ZYNQ xapp585 lvds 文档阅读 (三)参考设计:可从 Xilinx 官网下载本应用笔记的参考设计文件,文件同时提供 Verilog 和 VHDL 两种格式。本文中展示的不同方法对应的图中,均包含了相应文件的名称。此外,文件中还包括…

切削工具东莞网站建设wordpress 发布 软件

文章目录 前言LeetCode、1143. 最长公共子序列【中等,二维DP】题目链接与分类思路2022年暑假学习思路及题解二维DP解决 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者…

html5 图片网站flash网页设计教程

目录 一、相关和回归的概念(一)变量间的关系(二)Pearson(皮尔逊)相关系数 二、线性回归的概念和方程(一)回归分析概述(二)线性回归方程 三、线性回归模型的损…

自己做的表白网站栖霞酒店网站设计价格

iostat命令统计的磁盘I/O延迟通常是以毫秒(ms)为单位,例如在输出中的await字段表示的是平均服务时间,包括等待时间和处理时间,这个值就是以毫秒为单位。 然而,要获取更精确到微秒级别(us&#x…

网站开发有前途么法律网站的建设流程

一开始找jar包找了好久都没找到,后来花了6个积分把所有的依赖包找到了,现在放在百度云供大家免费下载: 链接:https://pan.baidu.com/s/12MTMy4d4e6hZsmWAdXbUMQ 提取码:433g 注意这些依赖包是3.5版本的不是最新版本。 …

PromSL详解

PromSL详解PromQL(Prometheus Query Language)是Prometheus监控系统的核心查询语言,专门用于处理时间序列数据。下面通过一个表格快速了解其核心概念: 特性分类核心概念说明​数据模型​时间序列 (Time Series)由指…

uniapp 简单封装接口请求

环境配置:utils/env.js let BASE_URL // 开发环境 if (process.env.NODE_ENV === development) {BASE_URL = http://192.168.0.135:21010 } // 生产环境 else {BASE_URL = } export default {BASE_URL }接口封装:ut…