java面试基础问题积累----多线程,并发

1.object提供哪些线程相关方法

object类是所有java类的超类,提供三个与线程密切相关的方法,wait(),notify(),notifyAll()

wait()提供三种重载形式,计时等待和无限等待(线程处于等待状态,直到其他线程调用此对象的notify()或者notifyAll()方法)

notify()唤醒此对象监视器上等待的单个线程

notifyAll()唤醒此对象监视器上等待的所有线程

2.线程死锁

Run1 implements  Runnable{

public void run(){

synchronized(‘‘){

}

}

}

获得当前线程名字:Thread.currentthread().getName()

创建线程:Thread th=new Thread(new Run1());th.start();

死锁四个条件:

1.互斥      2.非剥夺    3.请求与保持    4.循环等待

3.哪些接口可以返回有返回值的线程

Callable与Future接口联合使用,Executors包含从普通类转换成Callable类的实用方法

public interface Callable<V>{

V call() throws Exception;

}

public class Transfer implements Callable<Integer>{

public Integer call(){

return i;

}

}

Transfer tran=new Transfer();

FutureTask ft=new FutureTask<Integer>(tran);

Thread thr=new thread(ft);

thr.start();

4.哪些类可用于创建线程池

线程池是一个线程的集合,与连接池功能相同

如果系统中需要创建大量短生命周期的线程,需要用线程池

1>Executor类提供一些静态方法获取线程池,例如,newCachedThreadPool()--在没有线程时新建一个线程,newFixedThreadPool()--创建固定大小的线程

使用完线程池,使用ExecutorService.shutdown()

2>ThreadGrop类,类似线程池的线程组类,线程组将每个线程归属到某一个线程组管理的一员

5.后台线程(守护线程)

作用:为其他线程服务

如何设置:调用线程的start()方法之前调setDaemon(boolean on)方法

Thread:isDaemon(),setDaemon(boolean on)

Jvm中的系统资源回收机制就是后台线程的典型列子

6.线程休眠

Thread的sleep()是个静态方法,可以使当前运行中的线程暂停执行指定的时间

7.终止线程

1>stop():不安全的,在线程终止之前没有对其做任何的清除操作,将会释放该线程对象已经锁定的所有监视器

2>suspend():不安全的,有固定的死锁倾向,如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,目标线程重新开始以前任何线程都不能访问该资源,如果重新开始目标线程的线程想在调用resume()方法之前锁定该监视器,就发生死锁

3>利用boolean值来终止正在运行的线程

4>isInterrupted(),Interrupted()安全终止

8.线程的挂起和恢复

挂起:让出CPU的使用权限,暂时停止运行,由于时间不确定,所以挂起需要wait()

恢复:让挂起的线程恢复执行过程,从中断处继续线程的执行。挂起线程的对象执行notifyAll()方法

9.同步和异步的区别

同步:避免死锁,脏数据的发生,对共享资源按顺序来修改(电话,需要等待接收者的返回信息)

异步:可以提高效率,异步处理可以同时做多项工作,但保证必须是可以并发处理的(广播,不关心接受者的状态,不等待接受者的返回信息)

区别:需要等待和不需要等待

10.同步解锁解决共享资源

同步语句块,同步方法,还可以同步解锁

ReentrantLock lock.lock();lock.unlock();

11.什么时候涉及线程程序

通常,多个需求同时进行,或者需要长时间等待的操作。文件,网络,IO设备

时间: 2024-11-19 04:42:09

java面试基础问题积累----多线程,并发的相关文章

java面试基础题

java面试基础题 今天在网上看到一个大佬整理的java面试题,给大家分享一下,出处:https://www.cnblogs.com/peke/p/7894685.html 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 答:可以包括很多类,但是public修饰的类只能有一个且必须和java源文件名相同 Java有没有goto? 答:没有,在我知道的只有C语言中有 说说&和&&的区别. 答:逻辑与(&)和短路与(&&am

Java面试基础 -- Git篇

1.Git和SVN有什么区别? Git SVN Git是一个分布式的版本控制工具 SVN 是集中版本控制工具 它属于第3代版本控制工具 它属于第2代版本控制工具 客户端可以在其本地系统上克隆整个存储库 版本历史记录存储在服务器端存储库中 即使离线也可以提交 只允许在线提交 push/pull 操作更快 Push/pull 操作较慢 工程可以用 commit 自动共享 没有任何东西自动共享 2.什么是Git? Git 是分布式版本控制系统,可以跟踪文件的更改,并允许你恢复到任何特定版本的更改,优点

Java 面试知识点解析(二)——高并发编程篇

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧. 前序文章链接: Java 面试知识点解析(一)--基础知识篇 (一)高并发编程基础知识 这里涉及到一些基础的概念,我重新捧起了一下<实战 Java 高并发程序设计>这一本书,感觉到心潮澎湃,这或许就是笔者叙述功底扎实的

java面试总躲不过的并发(二):volatile原理 + happens-before原则

一.happens-before原则 同一个线程中的,前面的操作 happens-before 后续的操作.(即单线程内按代码顺序执行.但是,在不影响在单线程环境执行结果的前提下,编译器和处理器可以进行重排序,这是合法的.换句话说,这一是规则无法保证编译重排和指令重排). 1. 监视器上的解锁操作 happens-before 其后续的加锁操作.(Synchronized 规则) 2. 对volatile变量的写操作 happens-before 后续的读操作.(volatile 规则) 3.

java面试总躲不过的并发(一): 线程池ThreadPoolExecutor基础梳理

本文核心:线程池ThreadPoolExecutor基础梳理 一.实现多线程的方式 1.继承Thread类,重写其run方法 2.实现Runnable接口,实现run方法 3.实现Callable接口,实现call方法 由于Java的设计,只支持单继承,但是支持多实现形式,所以一般面向接口开发,Runnable接口与Callable接口的区别在于Callable接口中的call方法是带返回值的,其返回一个Future的异步类,我们可以通过Future的get方法获取结果,如果线程还没有执行完,g

java 面试基础总结(二)---多线程

1.实现多线程的三种方法 1.继成Thread 类,覆盖run()方法即可 2.implements Runnable接口 3.implements Callale接口,执行时通过FutureTask来启动线程 2.线程同步的方法 synchronized.lock 3.ThreadLocal 当使用ThreadLocal维护一个变量时,ThreadLocal会为每一个使用该线程的变量提供独立的变量副本,使每一个线程都可以独立的操作自己的变量副本. ThreadLocal<T>有四个方法: v

java面试基础大全,绝对经典&lt;126-170&gt;&lt;转&gt;

这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题,如果需要了解相关内容,可以参考我的另一篇文章<Java面试题集(86-115)>.此外,这篇文章还对企业应用架构.大型网站架构和应用服务器优化等内容进行了简单的探讨,这些内容相信对面试会很有帮助. 126.什么是ORM? 答:对象关系映射(Object-Relational Mapping,简称O

java面试基础大全,绝对经典&lt;51-95&gt;&lt;转&gt;

51.类ExampleA继承Exception,类ExampleB继承ExampleA. 有如下代码片断: try { throw new ExampleB("b") } catch(ExampleA e){ System.out.println("ExampleA"); } catch(Exception e){ System.out.println("Exception"); } 请问执行此段代码的输出是什么? 答:输出:ExampleA.(

java面试基础

快面临找工作了,留下了查看.... 基础必备 基础无外乎几部分:语言(C/C++或java),操作系统,TCP/IP,数据结构与算法,再加上你所熟悉的领域. J2SE基础 1. 九种基本数据类型的大小,以及他们的封装类. 2. Switch能否用string做参数? 3. equals与==的区别. 4. Object有哪些公用方法? 5. Java的四种引用,强弱软虚,用到的场景. 6. Hashcode的作用. 7. ArrayList.LinkedList.Vector的区别. 8. St