一、休眠线程--sleep()
Thread.sleep(毫秒,纳秒):控制当前线程休眠若干毫秒,遇到就会睡着时间到了就会自动醒来继续执行
静态方法:类名.方法调用
注意:1秒= 1000毫秒,1秒 = 1000 * 1000 * 1000=1000000000纳秒,因此windows系统对纳秒的支持不够好,因此用毫秒。
- 若在主线程中使用sleep(),则会中断异常,需抛出。
- 若使用Thread或者Runable创建线程,因为父类的run方法中没有出现异常,因此子类里也不运行出现异常直接抛出,而是需要自己捕获进行处理try-catch
new Thread() {
public void run() {
for(int i = 0; i < 10; i++) {
System.out.println(getName() + "...aa");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
二、守护线程
setDaemon(boolean):设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动退出
解释:任何一个守护线程都是整个JVM中所有非守护线程的保姆:
- 只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。
- Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。
Thread t1 = new Thread() {
public void run() {
for(int i = 0; i < 50; i++) {
System.out.println(getName() + "...aaaaaaaaaaaaaaaaaaaaaa");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
public void run() {
for(int i = 0; i < 5; i++) {
System.out.println(getName() + "...bb");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t1.setDaemon(true); //将t1设置为守护线程,只要t2执行完毕,t1就不会再执行
t1.start();
t2.start();
三、加入线程
Thread. join():当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续 。插队操作。
注意:匿名内部类在使用所在方法中的局部变量时,必须用final修饰。
final Thread t1 = new Thread() {
public void run() {
for(int i = 0; i < 50; i++) {
System.out.println(getName() + "...aaaaaaaaaaaaaaaaaaaaaa");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
public void run() {
for(int i = 0; i < 50; i++) {
if(i == 2) {
try {
//t1.join(); //插队,加入,当i=2时,t1加入线程,等t1全部执行完毕时再返回t2继续执行
t1.join(30); //加入,有固定的时间,t1执行30毫秒后,返回此处,t1和t2继续交替执行
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(getName() + "...bb");
}
}
};
t1.start();
t2.start();
四、礼让线程
yield:让出cpu,理论上是让出CPU去处理其他线程,但是效果特别不明显
五、设置线程的优先级
* setPriority():设置线程的优先级,1~10, 效果也不是很明显
MIN_PRIORITY = 1; 最低优先级
NORM_PRIORITY = 5; 默认优先级
MAX_PRIORITY = 10; 最高优先级