java线程知识点

1、thread  run和start区别数据库

run:它是一个普通的成员方法,调用run方法的话,会在当前线程中执行run方法,而不会启动新线程。多线程

start:会启动一个新线程,新线程会执行相应的run方法。spa

 

2、什么是多线程同步线程

在多线程状况下,同步能够控制对共享资源的访问,若是没有同步,当一个线程修改一个共享变量时,另外一个线程使用该变量时也会受到影响。对象

 

3、实现多线程的几种方式继承

1.实现Runnable接口接口

2.继承Thread类队列

3. 实现Callable有返回结果的多线程进程

注:Callable与Runnable使用方法大同小异;Callable 使用call()方法,Runnable使用run()方法;资源

Callable  带返回结果,Runnable不带返回结果;call抛出受检查的异常( Exception  ),而Runnable没有

 

4、ThreadLocal

ThreadLocal是一个线程级别的局部变量 , ThreadLocal为每一个使用该变量的线程提供了一个独立的变量副本, 每一个线程修改副本时不影响其它线程对象的副本 。

经常使用的使用可在DAO模式中见到,当DAO类做为一个单例类时,数据库连接(connection)被每个线程独立的维护,互不影响。(基于线程的单例)

 

5、sleep()和wait()区别

sleep()是一个静态方法 , 这意味着只对当前线程有效 , 即使是执行t.sleep(),也是当前线程进入睡眠,而不是t线程。 wait是object的方法而不是thread, 调用object.wait()时,线程先要获取这个对象的对象锁, 把当前线程添加到等待队列中, 随后另外一线程能够同步同一个对象锁来调用object.notify(),这样将唤醒原来等待中的线程,而后释放该锁。

 

6、在静态方法上使用同步会怎样

同步静态方法时会获取该类的“Class”对象,因此当一个线程进入同步的静态方法中时,线程监视器获取类自己的对象锁,其它线程不能进入这个类的任何静态同步方法。它不像实例方法,由于多个线程能够同时访问不一样实例同步实例方法。

 

7、 在一个对象上两个线程能够调用两个不一样的同步实例方法吗

不能够, 由于一个对象已经同步了实例方法,线程就获取了对象的对象锁。

 

8、什么是死锁

死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需资源。这种状况可能发生在当两个线程尝试获取其它资源的锁,而每一个线程又陷入无限等待其它资源锁的释放,除非一个用户进程被终止。就JavaAPI而言,线程死锁可能发生在一下状况。

●当两个线程相互调用Thread.join()

●当两个线程使用嵌套的同步块,一个线程占用了另一个线程必需的锁,互相等待时被阻塞就有可能出现死锁。

相关文章
相关标签/搜索