其他分享
首页 > 其他分享> > 2021-06-06

2021-06-06

作者:互联网

创建和使用线程的几种方法:
//方式1
Thread r  = new Thread(){
	@Qverride
	public void run(){
		log.debugg("线程执行内容")
	}
}
r.start();
		//方式2
      //工作内容
        Runnable r =  new Runnable(){
            @Override
            public void run() {
                System.out.println("工作内容");
            }
        };
        //创建线程
        Thread t2 = new Thread(r, "t2");
        //执行线程
        t2.start();
		//方式2.1
		//使用lambda表达式创建 
        Runnable t = () -> System.out.println("sdafa");
        Thread t2 = new Thread(t, "t2");
        t2.start();
      //方式三
        //FutureTask 接口继承了Runnable接口,和Future接口,Futre用于返回线程的执行结果;
        FutureTask<Integer> ftask = new FutureTask<>(() -> {
            System.out.println("111");
            //休眠1000毫秒后返回执行结果
            Thread.sleep(1000);
            return 100;
        });
        Thread t3 = new Thread(ftask, "t3");
        t3.start();
        //打印线程的执行结果
        System.out.println(ftask.get());
小结:

相关概念

栈与栈帧

JVM由堆,栈,方法区组成,每个线程启动的时候虚拟机都会分配一块栈内存

线程的上下文切换(Thread Context Switch)

因为以下一些原因导致cpu不再执行当前线程,转而执行下一线程的代码

常见方法

方法名static功能说明注意
start()启动一个新的线程,在新的线程中运行run方法中的代码run方法只让线程进入就绪状态,里面代码不一定立刻运行(cpu的时间片还没有分配给它)。每个线程的start()方法只能调用一次,如果调用多次会出现 IllegalThreadStateException
run()新线程启动后会调用的方法如果在构造 Thread 对象时传递了 Runnable 参数,则线程启动后会调用 Runnable 中的 run 方法,否则默认不执行任何操作。但可以创建 Thread 的子类对象,来覆盖默认行为
join()等待线程运行结
join(long n)等待线程运行结束,最多等待 n 毫秒
getId()获取线程长整型的 idid 唯一
getName()获取线程名
setName(String)修改线程名
getPriority()获取线程优先级
setPriority(int)修改线程优先级java中规定线程优先级是1~10 的整数,较大的优先级能提高该线程被 CPU 调度的机率
getState()获取线程状态Java 中线程状态是用 6 个 enum 表示,分别为:NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED
isInterrupted()判断是否被打断,不会清除 打断标记
isAlive()线程是否存活(还没有运行完毕)
interrupt()打断线程如果被打断线程正在 sleep,wait,join 会导致被打断的线程抛出 InterruptedException,并清除 打断标记 ;如果打断的正在运行的线程,则会设置 打断标记 ;park 的线程被打断,也会设置 打断标记
interrupted()static判断当前线程是否被打断会清除 打断标记
currentThread()static获取当前正在执行的线程
sleep(long n)static让当前执行的线程休眠n毫秒,休眠时让出 cpu 的时间片给其它线程
yield()static提示线程调度器让出当前线程对CPU的使用主要是为了测试和调试

标签:Runnable,06,Thread,t2,线程,2021,打断,new
来源: https://blog.csdn.net/wenriyan/article/details/117630709