栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础面试【Day7】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础面试【Day7】

java基础面试【Day7】
  1. Thread类中的yield方法有什么作用?
    Yield方法可以暂停当前正在执行的线程对象,让其它有相同优先级的线程执行。它是一个静态方法而且只保证当前线程放弃CPU占用而不能保证使其它线程一定能占用CPU,执行yield()的线程有可能在进入到暂停状态后马上又被执行。

  2. 谈谈volatile的使用及其原理
    volatile的两层语义:

volatile保证变量对所有线程的可见性:当volatile变量被修改,新值对所有线程会立即更新。或者理解为多线程环境下使用volatile修饰的变量的值一定是最新的。

jdk1.5以后volatile完全避免了指令重排优化,实现了有序性。

volatile的原理:

获取JIT(即时Java编译器,把字节码解释为机器语言发送给处理器)的汇编代码,发现volatile多加了lock addl指令,这个操作相当于一个内存屏障,使得lock指令后的指令不能重排序到内存屏障前的位置。这也是为什么JDK1.5以后可以使用双锁检测实现单例模式。

lock前缀的另一层意义是使得本线程工作内存中的volatile变量值立即写入到主内存中,并且使得其他线程共享的该volatile变量无效化,这样其他线程必须重新从主内存中读取变量值。

  1. 如何创建线程实例并运行?
    Thread 类本质上是实现 Runnable 接口的一个实例,代表一个线程的实例。创建线程实例一般有两种方法:

创建 Thread 的子类并重写 run()

public class MyThread extends Thread {   
  @Override     
  public void run(){        
  System.out.println("MyThread running");    
   } 
}

run() 方在调用 start() 方法后被执行,而且一旦线程启动后 start() 方法后就会立即返回,而不是等到 run() 方法执行完毕后再返回。


MyThread myThread = new MyThread(); myThread.start();

实现 Runnable 接口


public class MyRunnable implements Runnable{ 
   @Override     
   public void run(){
         System.out.println("MyRunnable running");     
         } 
 }

在新建类时实现 Runnable 接口,然后在 Thread 类的构造函数中传入 MyRunnable 的实例对象,最后执行 start() 方法即可;

Thread thread = new Thread(new MyRunnable()); thread.start();
  1. 线程阻塞的三种情况
    当线程因为某种原因放弃 CPU 使用权后,即让出了 CPU 时间片,暂时就会停止运行,知道线程进入可运行状态(Runnable),才有机会再次获得 CPU 时间片转入 RUNNING 状态。一般来讲,阻塞的情况可以分为如下三种:

等待阻塞(Object.wait -> 等待队列)

RUNNING 状态的线程执行 Object.wait() 方法后,JVM 会将线程放入等待序列(waitting queue);

同步阻塞(lock -> 锁池)

RUNNING 状态的线程在获取对象的同步锁时,若该 同步锁被其他线程占用,则 JVM 将该线程放入锁池(lock pool)中;

其他阻塞(sleep/join)

RUNNING 状态的线程执行 Thread.sleep(long ms) 或 Thread.join() 方法,或发出 I/O 请求时,JVM 会将该线程置为阻塞状态。当 sleep() 状态超时,join() 等待线程终止或超时. 或者 I/O 处理完毕时,线程重新转入可运行状态(RUNNABLE);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352253.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号