线程面试题

1.在使用线程时,为什么不直接调用run()方法而是调用了start():

  直接调用run()方法,不存在线程的启动,属于调用实例方法,只有一条执行路径,不存在多线程并行交替执行了。调用start()方法属于启动线程,将自动调用run()方法

2.子线程循环 10次,接着主线程循环 100次,接着又回到子线程循环 10次,接着再回到主线程又循环 100次,如此循环50次

public class ThreadTest{  public static void main(String[] args) {  final MyThread threads=new MyThread();  new Thread(  new Runnable(){  public void run(){  for(int i=1;i<=50;i++){  threads.subThread(i);  }  }  }  ).start();  new Thread(new Runnable(){  public void run(){  for(int i=1;i<=50;i++){  threads.mainThread(i);  }  }  }).start();  }  
}  class MyThread{  boolean bShouldSub=true;//标志子线程方法是否被调用  public synchronized void subThread(int i){  if(!bShouldSub){//若子线程没被调用,即主线程正在运行,所以等待  try {  this.wait();  } catch (InterruptedException e) {  // TODO Auto-generated catch block  
                e.printStackTrace();  }  }  for(int j=1;j<=10;j++){  System.out.println("sub thread :"+i+",loop : "+j);  }  bShouldSub=false;//子线程运行完毕  this.notify();//唤醒其他线程,即主线程  
    }  public synchronized void mainThread(int i){  if(bShouldSub){//若子线程正在被调用,所以等待  try {  this.wait();  } catch (InterruptedException e) {  // TODO Auto-generated catch block  
                e.printStackTrace();  }  }  for(int j=1;j<=100;j++){  System.out.println("main thread :"+i+",loop : "+j);  }  bShouldSub=true;//主线程调用完毕  this.notify();//唤醒子线程  
    }  
}  

3.编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示

public class TestThread {  /** * @author lucky */  public static void main(String[] args) {  new Thread(new TestRun("A")).start();  new Thread(new TestRun("B")).start();  new Thread(new TestRun("C")).start();  }  }  class TestRun implements Runnable {  private String name;  private static String flag = "A";  private int count = 10;  TestRun(String name) {  this.name = name;  }  @Override  public void run() {  while (count > 0) {                               synchronized (flag) {    if (flag.equals(name)) {  System.out.print(name);  count--;  if (name.equals("A"))  flag = "B";  if (name.equals("B"))  flag = "C";  if (name.equals("C"))  flag = "A";  }  }  }  }  }  

4.wait()方法和sleep()方法的区别:

  1.wait()方法用于将当前线程处于等待状态,它是Object类的;sleep()是将当前线程休眠,它是Thread
  2.wait()将锁释放,sleep()方法不会释放锁

5.生产者和消费者

  

  

转载于:https://www.cnblogs.com/xiao-ran/p/10735496.html

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

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

相关文章

Java IO - Reader

前言 JavaIO一共包括两种&#xff0c;一种是stream&#xff0c;一种是reader/writer&#xff0c;每种又包括in/out&#xff0c;所以一共是四种包。Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符&#xff0c;分别操作字符、字符数组或字符串&…

python程序设计语言的执行方式_编程语言用Python执行程序的4种方式

在编写代码中&#xff0c;经常会遇到在 Python程序中打开外部程序的需求&#xff0c;那么在Python里如何打开外部程序呢?今天我们来介绍四种不同的方式&#xff0c;供大家参考收藏。 使用 os.system() os.system(command)是最简单的一种方式&#xff0c;我们import os模块&…

leetcode 994.腐烂的橘子

题目&#xff1a; 在给定的网格中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。每分钟&#xff0c;任何与腐烂的橘子&#xff08;在 4 个正方向上&#xff09;相邻的新鲜橘子都会…

运行时异常和检查性异常区别

Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常&#xff0c;以及SQL异常都是这种异常。对于这种异常&#xff0c;JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以&#xff0c;面对这种异常不管我们是否愿…

VS2015配置freegult

与vs配置opencv类似 1.首先先找到自己系统里OpenGL相关.h.lib .dll的位置 一般系统里已自带&#xff0c;只要去找到就好&#xff0c;我的位置&#xff1a; gl.h C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl OpenGL32.Lib GlU32.Lib C:\Program Files\Microsoft…

java 死锁的检测与修复_调查死锁–第4部分:修复代码

java 死锁的检测与修复在这个简短的博客系列的最后BadTransferOperation中&#xff0c;我一直在讨论分析死锁&#xff0c;我将修复BadTransferOperation代码。 如果您已经看过本系列的其他博客 &#xff0c;那么您会知道&#xff0c;为了达到这一点&#xff0c;我创建了死锁演示…

python下载url_三种Python下载url并保存文件的代码详解

利用程序自己编写下载文件挺有意思的。 Python中最流行的方法就是通过Http利用urllib或者urllib2模块。 当然你也可以利用ftplib从ftp站点下载文件。此外Python还提供了另外一种方法requests。 来看看三种方法是如何来下载zip文件的&#xff1a; import urllib import urllib2 …

springcloud(七)-Feign声明式REST调用

前言 前面我们使用的RestTemplate实现REST API调用&#xff0c;代码大致如下&#xff1a; public User findById(PathVariable Long id) {return restTemplate.getForObject("http://localhost:8084/" id, User.class);} 由代码可知&#xff0c;我们是使用拼接字符串…

OpenGL 各类库的解析gl glu glut freeglut glfw glew

gl.h gl库是核心库&#xff0c;gl中包含了最基本的3D函数&#xff0c;可以再本地电脑中的&#xff1a; C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.0A\Include\gl 路径下找到gl.h头文件&#xff0c;打开后可以看到其中定义的上百个相关函数。 glu.h glu是实用库&#xf…

Java中throw和throws的区别

系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出&#xff0c;称为标准异常&#xff0c;并且 Java 强烈地要求应用程序进行完整的异常处理&#xff0c;给用户友好的提示&#xff0c;或者修正后使程序继续执行。 语句抛出的异常 用户程序自定义的异常和应…

面试问题:检查牙套

这是较容易的编码任务之一&#xff0c;但是您仍然可以在一些初步的技术筛选中达到要求。 问题看起来像这样&#xff1a; 给定仅包含字符( &#xff0c; ) &#xff0c; { &#xff0c; } &#xff0c; [和]的字符串&#xff0c;请确定输入字符串是否有效。 括号必须以正确的顺…

python字符串长度_如何使用python获取字符串长度?哪些方法?

掌握多种python技巧&#xff0c;对于我们更好的灵活应用python是非常重要的&#xff0c;比如接下来给大家介绍的获取字节长度&#xff0c;那大家脑海里就该有印象了&#xff0c;有几种方法呢&#xff1f;一起来看下吧~1、使用len&#xff08;&#xff09;函数 这是最直接的方法…

C++内存

在C中&#xff0c;内存分成5个区&#xff0c;他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈&#xff0c;就是那些由编译器在需要的时候分配&#xff0c;在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆&#xff0c;就是那…

Dijkstra算法——计算一个点到其他所有点的最短路径的算法

迪杰斯特拉算法百度百科定义&#xff1a;传送门 gh大佬博客&#xff1a;传送门 迪杰斯特拉算法用来计算一个点到其他所有点的最短路径&#xff0c;是一种时间复杂度相对比较优秀的算法 O&#xff08;n2&#xff09;&#xff08;相对于Floyd算法来说&#xff09; 是一种单源最短…

浅谈java中extends与implements的区别

Extends可以理解为全盘继承了父类的功能。implements可以理解为为这个类附加一些额外的功能&#xff1b;interface定义一些方法,并没有实现,需要implements来实现才可用。extend可以继承一个接口,但仍是一个接口,也需要implements之后才可用。对于class而言&#xff0c;Extends…

注意力机制 神经网络_图注意力网络(GAT)

引言作者借鉴图神经网络中的注意力机制&#xff0c;提出了图注意力神经网络架构&#xff0c;创新点主要包含如下几个&#xff1a;①采用masked self-attention层&#xff0c;②隐式的对邻居节点采用不同权重③介绍了多头注意力机制。 在作者的Introduction中&#xff0c;该论文…

java版问题

1.必填项在初次保存后应该已经有值了&#xff0c;怎么会加载数据又是空的的&#xff1f; 2.客户类型 企业性质&#xff1f; 一般机构、上市公司.... 3.文档管理-->上传文档&#xff0c;如果左侧选中文档节点时&#xff0c;上传文档时是否默认选中文档节点。 转载于:https:/…

html5标签属性大全_HTML5中video标签如何使用

HTML5中的video标签用于播放视频文件的&#xff0c;在video标签中我们可以设置窗口的宽高&#xff0c;视频的自动播放&#xff0c;循环播放以及视频的封面图片等等HTML5是下一代HTML&#xff0c;新增了许多新的标签&#xff0c;这些标签实现了许多新的功能。并且还减少了对外部…

Java中@Override的作用

Override是伪代码,表示重写(当然不写也可以)&#xff0c;不过写上有如下好处: 1、可以当注释用,方便阅读&#xff1b; 2、编译器可以给你验证Override下面的方法名是否是你父类中所有的&#xff0c;如果没有则报错。例如&#xff0c;你如果没写Override&#xff0c;而你下面的…

java程序中用户名和密码_在Java应用程序中使用密码术

java程序中用户名和密码这篇文章描述了如何使用Java密码体系结构 &#xff08;JCA&#xff09;&#xff0c;该体系结构使您可以在应用程序中使用密码服务。 Java密码体系结构服务 JCA提供了许多加密服务&#xff0c;例如消息摘要和签名 。 这些服务可通过特定于服务的API来访…