线程的创建方法(一)

线程之间的执行时相互独立的,哪一个线程优先执行取决于os的调度

线程的创建方式:3种

实现Runnable接口、继承Thread类、实现Callable接口

实现runnable接口
1、创建自定义类并实现runnable接口,并实现接口中的run方法
2、实例化自定义的类
3、将自定义类的实例作为参数给Thread类,创建thread实例
4、调用thread实例的start方法,启动子线程
RunnableThreadGY03 threadGY03 = new RunnableThreadGY03();
Thread thread = new Thread(threadGY03);
thread.start();

继承Thread类方式创建新线
1、创建自定义的类继承Thread类,并且重写run接
2、实例化自定义
3、通过实例化对象调用start方法来创建新线
ExtendThreadGY03 extendThreadGY03 = new ExtendThreadGY03();
extendThreadGY03.start();

实现Callable接口
callable接口的实现他是线程迟提供的一种创建线程的方式
1、实现Callable接口,并且实现call方法
2、创建线程池(Executors工具类提供的方法创建线程池)
3、创建Callable接口实现类的实例
4、将实例对象通过线程池的submit方法提交给线程池进而创建新的线程
 ExecutorService executor = Executors.newSingleThreadExecutor();
 CallableThreadGY03 callableThreadGY03 = new CallableThreadGY03();
 executor.submit(callableThreadGY03);

线程操作的相关方法介绍:

void start(): 启动一个新的线程,start方法必须子线程第一个调用的方法,start不能够重复使用,新线程会调用runnable接口提供的run方法;

public void run():run方法是子线程的执行体,子线程从进入run方法开始直到run方法执行接受意味着子线程的任务执行接收,在主线程直接调用run方法是不能创建子程序,只是普通方法调用;

public static void yield():让步或暂停:Thread类的静态方法,让正在执行的线程停止或者让步,让给优先级较高的线程获取CPU的执行权,(不一定会让出CPU执行权,例如等的线程优先级较低或者当前只有一个线程在执行时,那么当先线程又会立即获取CPU的执行权)
thread.yield() thread线程 != 正在执行的线程

public static void sleep(long millis) throw InterruptedException;
sleep(long millis)
sleep方法作用是让线程进行休眠,即让线程阻塞住,Thread类提供的静态方法,会抛出 InterruptedException异常

join():等待线程执行结束才继续执行,会抛出 InterruptedException异常 假如在a线程中b线程进行b.join调用,a线程等待b线程执行结束后才能继续执行,控制多线程按照次序执行
interrupt() 中断方法:底层调用native方法,native方法的作用是对特定标识位做修改;
主要作用于线程:运行中线程、阻塞线程(sleep、join);
运行中的线程:interrupt方法仅仅是对标志位做了修改,其他没有影响;
阻塞线程:interrupt方法对标志位做了修改,令阻塞中的线程感知到标志位做了修改,就会中断当前的阻塞状态,抛出InterruptedException异常;

isInterrupted:判断是否发生了中断操作,返回为boolean类型
true:表示发生了中断 false:表示未发生中断

setDaemon(boolean on):设置守护线程,true:设置为守护线程 false:用户线程
默认就是用户线程

isDeamon():判断当前线程是否为守护线程,返回boolean类型
true:守护线程 false:非守护线程
守护线程:脱离于空中终端,作为提供通用服务的线程存在,守护线程不会独自存在用户线程:
1、生命周期:守护线程的生命周期是依赖于用户线程,当有用户线程存在,守护线程就会存活,当没有用户线程存在,那守护线程也随之消亡,垃圾回收是有单独线程来处理的,负责垃圾回收的线程就是守护线程
setPriority(int newPriority)设置线程优先级,优先级分为10级,优先级数字越大,即优先级越高,优先级越高,被优先调用的概率会大
MIN_PRIORITY = 1; 最小优先级
NORM_PRIORITY = 5; 默认优先级
MAX_PRIORITY = 10; 最大优先级
int getPriority(),返回当前程序的优先级

练习题

假设有A.B.C三个线程,按照C.B.A的顺序执行???

public class TestThread0330 extends Thread{
    private Thread thread;
 public TestThread0330(Thread thread) {
        this.thread = thread;
    }
 public TestThread0330() {
        this.thread = null;
    }
 @Override
    public void run() {
        if (thread != null) {
            try {
                this.thread.join(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Thread.currentThread().getName()+" running");
    }
}

public static void test() {
    //假如有3个线程t1,t2,t3,将线程按照t3,t2,t1顺序执行
    TestThread0330 TC = new TestThread0330();
    TC.setName("C");
    TestThread0330 TB = new TestThread0330(TC);
    TB.setName("B");
    TestThread0330 TA = new TestThread0330(TB);
    TA.setName("A");
    TA.start();
    TB.start();
    TC.start();
}
public static void main(String[] args) {
    test();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值