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()
●当两个线程使用嵌套的同步块,一个线程占用了另一个线程必需的锁,互相等待时被阻塞就有可能出现死锁。