各自努力,最高处见!加油!
一、线程常用方法——第一组
1.setName :设置线程名称,使之与参数name相同
2.getName : 返回该线程名称
3.start : 使该线程开始执行;java虚拟机底层调用该线程的start0()方法
4.run : 调用线程对象的run方法
5.setPriority : 更改线程的优先级
6.getPriority : 获取线程的优先级
7.sleep : 在指定的毫秒数内让当前正在执行的线程休眠
8.interrupt : 中断线程
注意事项:
-
start底层会创建新的线程,调用run,run就是一个简单的方法调用,不会启动新线程。
-
线程优先级的范围:
-
interrupt中断线程,但没有真正结束线程。所以一般用于中断正在休眠的线程。
示例代码:
public class ThreadMethod01 {
public static void main(String[] args) throws InterruptedException {
T t=new T();
t.setName("阿牛");
t.setPriority(Thread.MAX_PRIORITY);
t.start();
for (int i = 0; i < 5; i++) {
Thread.sleep(1000);
System.out.println("hi");
}
t.interrupt();//执行到这里就会中断t线程的休眠
}
}
class T extends Thread{
@Override
public void run() {
while(true){
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"吃包子~~~"+i);
}
try {
System.out.println(Thread.currentThread().getName()+"休眠中~~~");
Thread.sleep(20000);
} catch (InterruptedException e) {
//当线程执行到一个interrupt方法时,就会catch一个异常
// e.printStackTrace();
System.out.println(Thread.currentThread().getName()+"被interrupt了");
}
}
}
}
二、线程常用方法——第二组
1.yieid :线程的礼让。让出CPU,让其他线程执行,但礼让的时间不确定,所以也不一定礼让成功。
2.join :线程的插队。插队的线程一旦插队成功,则肯定先执行完插入的线程所有任务。
线程插队的练习:
代码:
package ThreadMethod;
public class ThreadMethodExercise {
public static void main(String[] args) throws InterruptedException {
A a = new A();
Thread thread = new Thread(a);
for (int i = 0; i < 10; i++) {
thread.sleep(1000);
System.out.println("hi"+i);
if(i==5){
thread.start();
// thread.join();
thread.yield();
}
}
}
}
class A implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("hello"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
yieid()方法:
join方法:
三、用户线程和守护线程
- 用户线程:也叫工作线程,当线程的任务执行完或通知方式结束。
- 守护线程:一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束。
- 常见的守护线程:垃圾回收机制。
public class ThreadMethod {
public static void main(String[] args) throws InterruptedException {
B b = new B();
Thread thread = new Thread(b);
thread.setDaemon(true);//将子线程设置为守护线程
//当main线程结束后,守护线程自动结束
thread.start();
for (int i = 0; i < 20; i++) {
System.out.println("主线程正在运行!");
Thread.sleep(200);
}
}
}
class B implements Runnable{
@Override
public void run() {
for (;;){
System.out.println("子线程正在运行!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}