线程常见的方法
- starto()启动当前线程,表面上调用start方法,实际在调用线程里面的run方法
- run()线程类继承Thread类或者实现Runnable接口的时候,要重新实现run方法, run方法里面是线程要执行的内容
- currentThread Thread类中一个静态方法:获取当前正在执行的线程
- setName设置线程名字
- getName取线程名字
设置优先级
- 同优先级的线程,采用先到先服务,使用时间片策略
- 如果优先级别 高,被CUP调用的概率就会高
- 级别1-10 默认的级别为5
测试优先级
package com.it04.Thread;
public class TestThread01 extends Thread{
@Override
public void run() {
//输出1-10
for (int i = 1; i <=10 ; i++) {
System.out.println(i);
}
}
}
class TestThread02 extends Thread{
@Override
public void run() {
//输出20-30
for (int i = 20; i <=30 ; i++) {
System.out.println(i);
}
}
}
class Test{
public static void main(String[] args) {
//创建两个子线程,让两个子线程争抢资源
TestThread01 thread = new TestThread01();
thread.setPriority(1);//优先级别低
thread.start();
TestThread02 thread02 = new TestThread02();
thread.setPriority(10);//优先级别高
thread02.start();
}
}
Join方法
join方法:当一个线程调用了join方法,这个线程就会先被执行,它执行结束以后才可以去执行其余的线程。
注意:必须先start,再join才有效。
package com.it04.Thread;
public class ThreadJoin extends Thread {
//创建一个有参构造器设置名字
public ThreadJoin(String name) {
super(name);
}
@Override
public void run() {
//打印1-10
for (int i = 1; i <=10 ; i++) {
System.out.println(this.getName()+"-----"+i);
}
}
}
class TestJoin{
public static void main(String[] args) throws InterruptedException {
//打印1-100
for (int i = 10; i <=50 ; i++) {
System.out.println("main----"+i);
if (i==25){
//创建子线程
ThreadJoin threadjoin = new ThreadJoin("子线程");
threadjoin.start();
//相当于将程序进入阻塞状态
//必须join运行结束才能运行25之后的内容
threadjoin.join();
}
}
}
}
Sleep方法
sleep:人为制作阻塞事件
public class Testo1 {
//这是main方法,程序的入口
public static void main(String[] args) {
try {
//等待3秒在输出
System.out.println("等待3秒");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("你好");
}
}
案例:完成秒表功能
package com.it04.Thread;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ThreadSleep{
public static void main(String[] args) {
//定义时间格式
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
while (true){
//创建时间对象
Date date = new Date();
//将上面定义的格式将Date类型转换为指定格式的字符串
System.out.println("等待1秒输出:"+dateFormat.format(date));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
setDaemon
setDaemon:设置伴随线程
将子线程设置为主线程的伴随线程,主线程停止,子线程也停止。
但是主线程停止之后,子线程结束了,但没完全结束,子线程还需要运行会儿才会结束
package com.it04.Thread;
public class ThreadSetDaemon extends Thread{
@Override
public void run() {
for (int i = 1; i <=100 ; i++) {
System.out.println("子线程"+"------"+i);
}
}
}
class setDaemon{
public static void main(String[] args) {
//创建并启动子线程
ThreadSetDaemon setDaemon = new ThreadSetDaemon();
//设置伴随线程 注意: 先设置,再启动
//子线程结束了,但没完全结束
setDaemon.setDaemon(true);
setDaemon.start();
//主线程输出1-10
for (int i = 1; i <=10 ; i++) {
System.out.println("main"+"------"+i);
}
}
}