Java多线程与并发 面试十大常考题目。
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多线程与并发 面试十大常考题目。相关推荐
- JAVA多线程和并发面试问题
转载自 JAVA多线程和并发面试问题 Java多线程面试问题 1.进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程 ...
- java 多线程 并发 面试题_最常见的15个Java多线程,并发面试问题
假设你有三个线程T1,T2,T3.你如何能保证线程T2在线程T1后运行,T3在T2后运行 这个线程面试问题大多是在第一轮或电话筛选轮次中会被问到的,这个多线程问题的目的是检查候选人对"joi ...
- JAVA多线程和并发基础面试问答(转载)
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- 面试官十大常问面试问题总结
面试时,有几个问题是面试人员常常会提出的,针对这些问题好好准备,在面试时也就不会哑口无言,无言以对了,现在找工作,得面试.面试技巧也是一大学问,面试的功夫做到家了,找工作很容易的.下面就面试官十大常问 ...
- Java多线程与并发系列从0到1全部合集,强烈建议收藏!
在过去的时间中,我写过Java多线程与并发的整个系列. 为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java多线程与并发的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人. ...
- 【附答案】Java面试2019常考题目汇总(一)
转载自 [附答案]Java面试2019常考题目汇总(一) 一.JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是 ...
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- JAVA Java多线程与并发库
Java多线程与并发库 同步方式 import javax.xml.stream.events.StartDocument;public class TestSynchronized {public ...
- 面试十大难题的样板回答
面试十大难题的样板回答 广州日报报道,在面试前先了解.练习对几个很难的问题进行回答会帮助你对其他问题的回答做准备.有的问题问得比较多,有的较少但却是回答其它问题的基础. 1.为什么不谈谈你自己? ...
最新文章
- Windows Server 2012 系统群集
- tableau可视化数据分析60讲(十五)-tableau常用可视化视图(散点图气泡图)
- 大商创去后门eval-stdin.php,大商创的开源代码都有哪些后门,如何去除大商创后门...
- boost::mpl模块实现equal相关的测试程序
- [BUUCTF-pwn]——mrctf2020_easyoverflow
- js 调用c语言函数看,web前端:JS高级---函数中的this的指向,函数的不同调用方式...
- CCF201409-3 字符串匹配(解法二)(100分)(废除!!!)
- iphone7无服务_iPhone 7 系列被召回?设计缺陷...
- 【转】android开发中如何结束所有的activity
- 六石风格文档范例:做测试结果表格
- 婚纱摄影后期修片,PS婚纱写真后期…
- 模型预测控制matlab工具箱,MATLAB模型预测控制工具箱函数..
- 联想·云计算中心运维服务(1+X中级)教材出版
- 基于python实现全网视频解析--javaWeb篇
- C语言实现乘法原理,伽罗华乘法原理与C语言实现
- Draco压缩算法使用
- Milvus 群星闪耀时|又一个小目标达成 :社区正式突破 15,000 星!
- 【浙大版《C语言程序设计实验与习题指导(第4版)》题目集】实验2-4-4 求简单交错序列前N项和
- 计算机有效教学案例分析,中职计算机应用基础有效教学案例分析.doc
- 此应用程序当前处于脱机状态