您的位置:首页 > 编程语言 > Java开发

java 基础整理

2015-06-21 20:53 423 查看
1.线程和进程的关系:进程是独立的运行环境,可以看作一个程序或应用,线程可以看作进程中的一个任务,几个进程可以同时有多个线程在运行,线程可以被称为轻量级进程,线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。

2.多线程编程的好处:多线程并发可以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态,servlet通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

3.用户线程和守护线程的区别:守护进程是不会阻止JVM的关闭的。当有用户线程运行时,JVM不能关闭。当没有用户线程运行时,有没有守护线程没关系,JVM都会关闭,比如垃圾回收线程。

4.如何创建线程:实现runnable方法和继承thread类。

5.线程的几种生命周期:新建:new;当调用start()方法时会是run,wait(),block(),dead();

6.可以直接运行Thread的run()方法,但为了执行我们的代码,必须用start();

7.sleep()方法会使线程暂停一段时间,interrupt()并不是销毁线程,而只是标记。

8.线程的优先级:每个线程都有优先级,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。

9.线程的调度器(thread scheduler)和时间分片:线程调度器是操作系统服务,它为runnable邪恶状态线程分配cpu时间。时间分片是指将可用的CPU时间分配给可用的Runnable线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时间。线程调度并不受到Java虚拟机控制。

10.多线程的上下文切换:上下文切换是存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。

11.Thread类的joint()方法来确保所有程序创建的线程在main()方法退出前结束。

12.进程是如何通信的,信号量,共用内存,管道等;

13.为什么出现同步问题:每个线程会单独分配一个针对i值的拷贝(独立内存区域),但是申明的i值确是在主内存区域中,当对i值修改完毕后,线程会将自己内存区域块中的i值拷贝到主内存区域中,因此有可能每个线程拿到的i值是不一样的,从而出现了同步问题。

14.原子性,java.util.concurrent.atomic包提供了int和long类型的装类,它们可以自动的保证对于他们的操作是原子的并且不需要使用同步。

15.executor框架:无限制的创建线程会引起应用程序内存溢出。所以创建一个线程池是个更好的的解决方案,因为可以限制线程的数量并且可以回收再利用这些线程。利用Executors框架可以非常方便的创建一个线程池。

16.堵塞队列:阻塞队列的实现都是线程安全的,所有的查询方法都是原子的并且使用了内部锁或者其他形式的并发控制。

17.callable和feature:线程池提交Callable任务后返回了一个Future对象,使用它我们可以知道Callable任务的状态和得到Callable返回的执行结果。

18.并发容器:并发容器支持并发的遍历和并发的更新。
copyOnWriteArrayList();俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完 元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元 素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。

19.hashMap设计原理,concurrcyhashmap
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: