1 进程和线程的区别?





2 线程的start和run方法的区别.

package com.interview.javabasic.thread;public class ThreadStartOrRunMethodDiff {public static void main(String[] args) {Thread t = new Thread() {public void run() {System.out.println(Thread.currentThread().getName());}};t.run();}}

package com.interview.javabasic.thread;public class ThreadStartOrRunMethodDiff {public static void main(String[] args) {Thread t = new Thread() {public void run() {System.out.println(Thread.currentThread().getName());}};t.start();}}

3 Thread和Runnable的关系?

package com.interview.javabasic.thread;public class MyRunnable implements Runnable {private String name;public MyRunnable(String name){this.name = name;}@Overridepublic void run(){for(int i = 0 ; i < 10 ; i ++){System.out.println("Thread start : " + this.name + ",i= " + i);}}
}
package com.interview.javabasic.thread;public class RunnableDemo {public static void main(String[] args) throws InterruptedException {MyRunnable mr1 = new MyRunnable("Runnable1");MyRunnable mr2 = new MyRunnable("Runnable2");MyRunnable mr3 = new MyRunnable("Runnable3");Thread t1 = new Thread(mr1);Thread t2 = new Thread(mr2);Thread t3 = new Thread(mr3);t1.start();t2.start();t3.start();}
}

4 如何实现处理线程的返回值?

成员变量传参,可以看上面的代码 MyRunnable的实现。

4 如何实现处理线程的返回值?

1 主线程等待法

package com.interview.javabasic.thread;public class CycleWait implements Runnable{private String value;public void run() {try {Thread.currentThread().sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}value = "we have data now";}public static void main(String[] args) throws InterruptedException {CycleWait cw = new CycleWait();Thread t = new Thread(cw);t.start();
//        while (cw.value == null){
//            Thread.currentThread().sleep(100);
//        }
//        t.join();System.out.println("value : " + cw.value);}
}

结果如下:

主线程等待法,代码如下:

package com.interview.javabasic.thread;public class CycleWait implements Runnable{private String value;public void run() {try {Thread.currentThread().sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}value = "we have data now";}public static void main(String[] args) throws InterruptedException {CycleWait cw = new CycleWait();Thread t = new Thread(cw);t.start();while (cw.value == null){Thread.currentThread().sleep(100);}System.out.println("value : " + cw.value);}
}

主线程等待法 的缺点

1.无法做到精确的时间控制
2.成员变量多的话,一大堆if else

通过加入 join()方法

package com.interview.javabasic.thread;public class CycleWait implements Runnable{private String value;public void run() {try {Thread.currentThread().sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}value = "we have data now";}public static void main(String[] args) throws InterruptedException {CycleWait cw = new CycleWait();Thread t = new Thread(cw);t.start();t.join();System.out.println("value : " + cw.value);}
}

package com.interview.javabasic.thread;import java.util.concurrent.Callable;public class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception{String value="test";System.out.println("Ready to work");Thread.currentThread().sleep(5000);System.out.println("task done");return  value;}}
package com.interview.javabasic.thread;import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;public class FutureTaskDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<String> task = new FutureTask<String>(new MyCallable());new Thread(task).start();if(!task.isDone()){System.out.println("task has not finished, please wait!");}System.out.println("task return: " + task.get());}
}

线程池

package com.interview.javabasic.thread;import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;public class ThreadPoolDemo {public static void main(String[] args) {ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();Future<String> future = newCachedThreadPool.submit(new MyCallable());if(!future.isDone()){System.out.println("task has not finished, please wait!");}try {System.out.println(future.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();} finally {newCachedThreadPool.shutdown();}}
}

8-5 线程的状态?



package com.interview.javabasic.thread;public class ThreadTest {private static void attack() {System.out.println("Fight");System.out.println("Current Thread is : " + Thread.currentThread().getName());}public static void main(String[] args) throws InterruptedException {Thread t = new Thread(){public void run(){attack();}};System.out.println("current main thread is : " + Thread.currentThread().getName());t.start();t.join();t.start();}
}

8-6 sleep和wait的区别?



8-7 notify和notifyAll的区别?



8-8 yield函数

8-9 interrupt函数




8-10 前述方法及线程状态总结

Java多线程与并发 面试十大常考题目。相关推荐

  1. JAVA多线程和并发面试问题

    转载自   JAVA多线程和并发面试问题 Java多线程面试问题 1.进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程 ...

  2. java 多线程 并发 面试题_最常见的15个Java多线程,并发面试问题

    假设你有三个线程T1,T2,T3.你如何能保证线程T2在线程T1后运行,T3在T2后运行 这个线程面试问题大多是在第一轮或电话筛选轮次中会被问到的,这个多线程问题的目的是检查候选人对"joi ...

  3. JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  4. 面试官十大常问面试问题总结

    面试时,有几个问题是面试人员常常会提出的,针对这些问题好好准备,在面试时也就不会哑口无言,无言以对了,现在找工作,得面试.面试技巧也是一大学问,面试的功夫做到家了,找工作很容易的.下面就面试官十大常问 ...

  5. Java多线程与并发系列从0到1全部合集,强烈建议收藏!

    在过去的时间中,我写过Java多线程与并发的整个系列. 为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java多线程与并发的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人. ...

  6. 【附答案】Java面试2019常考题目汇总(一)

    转载自  [附答案]Java面试2019常考题目汇总(一) 一.JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是 ...

  7. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

  8. JAVA Java多线程与并发库

    Java多线程与并发库 同步方式 import javax.xml.stream.events.StartDocument;public class TestSynchronized {public ...

  9. 面试十大难题的样板回答

    面试十大难题的样板回答   广州日报报道,在面试前先了解.练习对几个很难的问题进行回答会帮助你对其他问题的回答做准备.有的问题问得比较多,有的较少但却是回答其它问题的基础. 1.为什么不谈谈你自己? ...

最新文章

  1. Windows Server 2012 系统群集
  2. tableau可视化数据分析60讲(十五)-tableau常用可视化视图(散点图气泡图)
  3. 大商创去后门eval-stdin.php,大商创的开源代码都有哪些后门,如何去除大商创后门...
  4. boost::mpl模块实现equal相关的测试程序
  5. [BUUCTF-pwn]——mrctf2020_easyoverflow
  6. js 调用c语言函数看,web前端:JS高级---函数中的this的指向,函数的不同调用方式...
  7. CCF201409-3 字符串匹配(解法二)(100分)(废除!!!)
  8. iphone7无服务_iPhone 7 系列被召回?设计缺陷...
  9. 【转】android开发中如何结束所有的activity
  10. 六石风格文档范例:做测试结果表格
  11. 婚纱摄影后期修片,PS婚纱写真后期…
  12. 模型预测控制matlab工具箱,MATLAB模型预测控制工具箱函数..
  13. 联想·云计算中心运维服务(1+X中级)教材出版
  14. 基于python实现全网视频解析--javaWeb篇
  15. C语言实现乘法原理,伽罗华乘法原理与C语言实现
  16. Draco压缩算法使用
  17. Milvus 群星闪耀时|又一个小目标达成 :社区正式突破 15,000 星!
  18. 【浙大版《C语言程序设计实验与习题指导(第4版)》题目集】实验2-4-4 求简单交错序列前N项和
  19. 计算机有效教学案例分析,中职计算机应用基础有效教学案例分析.doc
  20. 此应用程序当前处于脱机状态

热门文章

  1. 软件可用性测试mantis,可用性测试(软件/Web)
  2. 二进制漏洞挖掘_漏洞挖掘的艺术-面向二进制的静态漏洞挖掘
  3. mit数据集_MIT的DNN硬件加速器教程(二)流行的DNN和数据集
  4. C#实现DataTable按天分组并计数
  5. win10如何截屏_win10系统电脑截屏的多种操作方法
  6. LATEX数学式哪种字号比较漂亮
  7. 为5—18岁青少年提供营地教育,漫族完成百万级天使轮融资
  8. ulimit常用参数介绍
  9. 谈谈-Android状态栏的编辑
  10. Django编写RESTful API(二):请求和响应