多线程面试

调试意味着就是要main线程挂起来

线程一定要调用start启动,run是被java虚拟机调度的

start显示被调用的好处就是一个对象可以作为线程来运行

 Runable可以当做一个在属性上共享方式而存在的线程,无需Thread方式共享

http://jingyan.baidu.com/article/e6c8503c2a32e2e54f1a1831.html

后面不是很好理解

 

 

4.java线程常用方法

 

 

,分别是新建,可运行,运行中,睡眠,阻塞,等待,死亡。【也可以五个,便于识记】

 

2.setPriority(int newPriority)方法

设置线程的优先级:线程默认的优先级是创建它的执行线程的优先级。

线程优先级为1~10之间的正整数,JVM从不会改变一个线程的优先级。然而,1~10之间的值是没有保证的。一些JVM可能不能识别10个不同的值,而将这些优先级进行每两个或多个合并,变成少于10个的优先级,则两个或多个优先级的线程可能被映射为一个优先级。

 

线程默认优先级是5,Thread类中有三个常量,定义线程优先级范围:

static int MAX_PRIORITY
          线程可以具有的最高优先级。 
static int MIN_PRIORITY
          线程可以具有的最低优先级。 
static int NORM_PRIORITY
          分配给线程的默认优先级。 

 

3Thread.yield()方法,放弃的意思

Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。

yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。

结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。 

4join()方法

Thread的非静态方法join()让一个线程B“加入”到另外一个线程A的尾部。在A执行完毕之前,B不能工作。

 

1、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。

sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。

【如果是调用Thread.sleep(10);】【实例也是可以调用静态方法的,静态则不能使用实例】
2、最主要sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

 

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。

 

wait和notify【wait相对于notify是释放锁,让出CPU】

wait()和notify()一系列的方法,是属于对象的,不是属于线程的。在synchronized语句块中,同一个对象,一个线程在执行完这一块代码之前,同一个对象是不能同时被两个线程用来进入synchronized中的。这就是线程同步。

 

wait()意思是说,我等会儿再用这把锁,CPU也让给你们,我先休息一会儿!

notify()意思是说,我用完了,你们谁用?

 

wait()会让出对象锁,同时,当前线程休眠,等待被唤醒,如果不被唤醒,就一直等在那儿。

notify()在多个锁的情况下,b.notify只是唤醒拥有B对象锁的线程,a锁被释放

 【重解释下join和yield】

在t2实现体中,t1.join则是让t2进入堵塞状态,而yield相反,自己让出给t2运行

 

 

概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。 

posted on 2016-07-22 20:27  乐可2016  阅读(190)  评论(0编辑  收藏  举报