一 wait()方法与sleep()方法的区别
1.wait方法和sleep()方法都是让线程进入冻结状态,既释放了执行资格,也释放了执行权。
2.wait()方法可以指定进入冻结状态的时间,也可以不指定。
sleep()方法必须指定时间
3.在同步中,对cpu的执行权和锁的处理不同
wait:释放执行权,释放锁。
sleep:释放执行权,不释放锁。
因为进入wait方法的线程需要和相对应的notify,notifyAll方法相搭配才能唤醒。而sleep方法等过了指定时间后自动唤醒。
在同步中谁拿锁谁执行,如果wait方法不释放锁,那么没有能去唤醒该线程的线程。

二停止线程的方法
1.run方法的结束
2.停止线程的方法
怎么控制线程任务的结束呢?
任务中都会有循环结构,只要控制循环结构就可以结束任务。
控制循环通常就是用定义标记来完成,但是如果线程处于冻结状态,无法读取标记,怎么来结束呢?
注意:可以用interrupt方法使中断线程被清楚。字面理解就是将冻结状态的线程强制重新获得执行资格。可以用interrupt方法将线程从冻结状态强制恢复到运行状态中来,让线程获取cpu的执行资格,这个强制动作会抛出interrupted Exception,记得要处理异常。

三setDaemon(boolean on)
将当前线程设为守护线程或用户线程和普通线程运行方式一样,而结束时,如果所有的前台线程都结束,后台线程会自动结束,当正在进行的线程都是守护线程时java虚拟机退出

四join()方法
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。
比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
在主线程调用join方法,主线程此时进入冻结状态,执行调用join方法的线程。

五线程组的概念
将多个线程封装成一个组,调用时更加简便。

六yield()方法
Thread.yield( )方法:
使当前线程从执行状态(运行状态)变为可执行态(阻塞状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。

七基础小面试题

class Test implements Runnable
{
	public void run(Thread t)
	{
		System.out.println();
	}
}
//编译错误,因为此时接口的run方法没有实现,应改为抽象类

class Thread4
{
	public static void main(String []args)
	{
		new Thread(new Runnable()
				{
			public void run()
			{
				System.out.println("Runnable中的run方法被执行");
			}
			
				})
		{
			public void run()
			{
				System.out.println( "Thread的匿名类部类子类被执行");
			}
		}.start();
	}
}
Thread的匿名类部类子类被执行

在进行Thread的匿名内部类的重写时,若有子类重写的方法和传入的接口任务,先执行子类重写的方法,若子类没有重写,就执行接口的任务,若两个都没有,就执行Thread类中的任务。