zoukankan      html  css  js  c++  java
  • 关于JAVA线程面试题

    关于JAVA线程面试题

    1.doOther需要等到doSome结束吗

     1 package javase.exam1;
     2 /**
     3  * 面试题:doOther需要等到doSome结束吗
     4  *   不需要 
     5  *     synchronized 作用在实例方法上 相当于this 而doother没有synchronized
     6  *  
     7  * @author yumu
     8  *
     9  */
    10 public class Exam01 {
    11 
    12     public static void main(String[] args) throws InterruptedException {
    13         MyClass mc=new MyClass();
    14         
    15         Thread t1=new MyThread(mc);
    16         Thread t2=new MyThread(mc);
    17         t1.setName("t1");
    18         t2.setName("t2");
    19         
    20         t1.start();
    21         Thread.sleep(1000);
    22         t2.start();
    23     }
    24 
    25 }
    26 class MyThread extends Thread{
    27     private MyClass mc;
    28     public MyThread(MyClass mc){
    29         this.mc=mc;
    30     }
    31     public void run(){
    32         if(Thread.currentThread().getName().equals("t1")){
    33             mc.doSome();
    34             
    35         }
    36         if(Thread.currentThread().getName().equals("t2")){
    37             mc.doOther();
    38             
    39         }
    40         
    41     }
    42 }
    43 class MyClass{
    44 //    public synchronized static void doSome(){   synchronized出现在静态方法上,是类锁,只有一把,需要等待
    45     public synchronized void doSome(){
    46         System.out.println("doSome begin");
    47         try {
    48             Thread.sleep(1000*10);
    49         } catch (InterruptedException e) {
    50             
    51             e.printStackTrace();
    52         }
    53         System.out.println("doSome over");
    54     }
    55     public void doOther(){
    56         System.out.println("doother begin");
    57         
    58         System.out.println("doother over");
    59     }
    60 }

    2.doOther需要等到doSome结束吗

     1 package javase.exam1;
     2 /**
     3  * 面试题:doOther需要等到doSome结束吗
     4  *   不需要 
     5  *   myclass对象两个 两把锁  
     6  *  
     7  * @author yumu
     8  *
     9  */
    10 public class Exam02 {
    11 
    12     public static void main(String[] args) throws InterruptedException {
    13         MyClass mc1=new MyClass();
    14         MyClass mc2=new MyClass();
    15         
    16         Thread t1=new MyThread1(mc1);
    17         Thread t2=new MyThread1(mc2);
    18         t1.setName("t1");
    19         t2.setName("t2");
    20         
    21         t1.start();
    22         Thread.sleep(1000);
    23         t2.start();
    24     }
    25 
    26 }
    27 class MyThread1 extends Thread{
    28     private MyClass mc;
    29     public MyThread1(MyClass mc){
    30         this.mc=mc;
    31     }
    32     public void run(){
    33         if(Thread.currentThread().getName().equals("t1")){
    34             mc.doSome();
    35             
    36         }
    37         if(Thread.currentThread().getName().equals("t2")){
    38             mc.doOther();
    39             
    40         }
    41         
    42     }
    43 }
    44 class MyClass1{
    45     public synchronized void doSome(){
    46         System.out.println("doSome begin");
    47         try {
    48             Thread.sleep(1000*10);
    49         } catch (InterruptedException e) {
    50             
    51             e.printStackTrace();
    52         }
    53         System.out.println("doSome over");
    54     }
    55     public synchronized void doOther(){
    56         System.out.println("doother begin");
    57         
    58         System.out.println("doother over");
    59     }
    60 }

    3.关于Thread.sleep()方法 线程t会进入休眠吗

     1 package javase.thread;
     2 /**
     3  * 关于Thread.sleep()方法面试题
     4  *   线程t会进入休眠吗
     5  * @author yumu
     6  *
     7  */
     8 public class ThreadTest06 {
     9 
    10     public static void main(String[] args) throws InterruptedException {
    11         MyThread3 t=new MyThread3();
    12         t.setName("t2");
    13         t.start();
    14         //调用sleep    静态方法
    15         t.sleep(2000);  //在执行的时候还是会转换成Thread.sleep(2000);
    16                         //这换代码是让当前线程进入休眠,他出现在main方法
    17         System.out.println("你好");//2秒后输出
    18     }
    19 
    20 }
    21 class MyThread3 extends Thread{
    22     public void run(){
    23         for(int i=0;i<10;i++){
    24             System.out.println(Thread.currentThread().getName()+"--->"+i);
    25         }
    26     }
    27 }

    线程知识点:

     练习题:

  • 相关阅读:
    Leetcode 15 3Sum
    Leetcode 383 Ransom Note
    用i个点组成高度为不超过j的二叉树的数量。
    配对问题 小于10 1.3.5
    字符矩阵的旋转 镜面对称 1.2.2
    字符串统计 连续的某个字符的数量 1.1.4
    USACO twofive 没理解
    1002 All Roads Lead to Rome
    USACO 5.5.1 求矩形并的周长
    USACO 5.5.2 字符串的最小表示法
  • 原文地址:https://www.cnblogs.com/yumu77/p/13868250.html
Copyright © 2011-2022 走看看