1.启用多线程两种方式的区别
(1)继承Thread:由于子类重写了Thread类的run(),当调用start()时,直接找子类的run()方法。
(2)实现Runnable :构造函数中传入了Runable的引用,成员变量记住了他,start()调用run()方法时内部判断成员变量Runnable的引用是否为空,不为空的时候,编译时看到是Runnable的run(),运行时看的是子类的run()方法。
2.继承Thread和实现Runnable接口的优缺点:
(1)继承Thread
优点:可以直接使用Thread类中的方法,代码简单。
缺点:如果已经有了父类,就不能使用该方法。
(2)实现Runnable接口
优点:即使自己定义的线程类有了父类也没有关系,因为有了父类也可以实现接口,而且接口是可以多实现的。
缺点:不能直接使用Thread中的方法,需要先获取到线程对象后,才能得到Thread的方法,代码复杂。
3.匿名内部类实现线程的两种方式
(1)继承Thread
new Thread(){
public void run()
{
}
}.start();
(2)实现Runnable接口
new Thread(new Runnable(){
public void run()
{
}
}).start();
4.获取设置多线程的名字
(1)通过getName()方法获取对象的名字
(2)设置名字:通过构造函数可以传入String类型的名字
通过setName(String)方法可以设置线程的名字
5.获取当前线程
(1) Thread.currentThread()
(2) 使用
new Thread(new Runnable(){
public void run()
{
//获取当前正在执行的线程
System.out.println(Thread.currentThread().getName());
}
}).start();
6.休眠线程
Thread.sleep()
7.setDaemon(bool)守护线程
(1)设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程执行结束后,自动退出。如象棋中,如果将军死了,其他棋子都会随之死亡
(2)传入true为守护线程
8.join(int)加入线程
(1) 当前线程暂停,等待指定的线程执行结束后,当前线程再继续
9.Thread.yield()礼让线程
(1) 让出cpu,另一条线程执行
10.设置线程优先级
setPriority()设置线程的优先级
原文:https://www.cnblogs.com/jinjingBlog/p/11794541.html