public class Test {
public static void main(String[] args) {
Thread t1 = new Thread(new TaskA());
Thread t2 = new TaskB();
t1.start();
t2.setDaemon(true); //调用了setDaemon()方法 不需要调用join()方法
t2.start();
//sleep()进入限期等待 join()进入无限期等待
// try {
// t1.join(); //join方法 表示让当前线程(主线程)进入等待状态(无限期等待),让出cpu时间片。等待到t1结束为止,主线程执行
// t2.join(); //同上
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//Thread.currentThread() 会返回当前正在执行(正处在运行状态)的线程
System.out.println(Thread.currentThread().getName()); //获取当前执行线程对象并且获取里面name属性
System.out.println("所有线程结束");
}
}
class TaskA implements Runnable{
@Override
public void run() {
for (int i= 1;i<=52;i++){
System.out.print(i);
// System.out.println(Thread.currentThread().getName());
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
}
}
class TaskB extends Thread{
@Override
public void run() {
for (char i = 'A'; i <='Z' ; i++) {
System.out.print(i);
// System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(180);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Runnable对象 ==>任务对象 new Thread(任务对象)
单核cpu环境下,运行状态的线程只有一个。
sleep()进入限期等待 join()进入无限期等待
Thread.currentThread() 会返回当前正在执行(正处在运行状态)的线程
Thread.yield() 表示当前线程放弃当前cpu时间片,下次os分cpu可能还会分给该线程(调用yield的线程)
t.setDaemon(true) true/false true表示该线程为守护线程,该线程是否结束无所谓,进程中的非守护
线程都结束时,不管该守护线程是否终止,该进程终止。
t1.setPriority(10); //设置线程的优先级 1-10的整数 10为最高优先级 优先让t1线程先执行完毕
//t1.setPriority(Thread.MAX_PRIORITY);
不同的操作系统有不同的线程调度策略,windows支持优先级,其他不确定。
这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!