深圳市罗湖区网站建设,简单企业网站源码 asp.net 公司介绍 产品展示,中装建设法人,广州市住房和城乡建设局官方网站目录 1.概述
2.Thread的常见构造方法
3.Thread的几个常见属性 4.启动一个线程-start()
5.中断一个线程
5.1通过共享的标记来进行沟通
5.2 调用 interrupt() 方法来通知
6.等待一个进程 7.获取当前线程引用
8.线程的状态
8.1所有状态
8.2线程状态和转移的意义 1.概述
…目录 1.概述
2.Thread的常见构造方法
3.Thread的几个常见属性 4.启动一个线程-start()
5.中断一个线程
5.1通过共享的标记来进行沟通
5.2 调用 interrupt() 方法来通知
6.等待一个进程 7.获取当前线程引用
8.线程的状态
8.1所有状态
8.2线程状态和转移的意义 1.概述
Thread是jvm用来管理线程的一个类即在Java中每个线程都有一个唯一的Thread对象与之关联。
每个执行流也需要有一个对象来描述类似下图所示而 Thread 类的对象 就是用来描述一个线程执行流的JVM 会将这些 Thread 对象组织起来用于线程调度线程管理
2.Thread的常见构造方法
方法说明Thread()创建线程对象Thread(Runnable target)使用 Runnable 对象创建线程对象Thread(String name)创建线程对象并命名Thread(Runnable target, String name)使用 Runnable 对象创建线程对象并命名 3.Thread的几个常见属性
属性获取方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDaemon()是否存活isAlive()是否被中断isInterrupted() 4.启动一个线程-start()
之前我们已经看到了如何通过覆写 run 方法创建一个线程对象但线程对象被创建出来并不意味着线程就开始运行了。 覆写 run 方法是提供给线程要做的事情的指令清单线程对象可以认为是把 李四、王五叫过来了 而调用 start() 方法就是喊一声”行动起来“线程才真正独立去执行了。
调用 start 方法, 才真的在操作系统的底层创建出一个线程.即run方法是一个行动指南而真正让这个线程创建并执行出来的是strat()方法。
5.中断一个线程 对于正在run方法中执行的线程我们一般有两种方法来中断
5.1通过共享的标记来进行沟通
public class demo3 {public static boolean quit;public static void main(String[] args) throws InterruptedException {Thread t new Thread(()-{while (!quit){System.out.println(线程在执行...);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();Thread.sleep(5000);System.out.println(结束线程);quittrue;}
}5.2 调用 interrupt() 方法来通知
public class demo3 {public static void main(String[] args) throws InterruptedException {Thread t new Thread(()-{while (!Thread.currentThread().isInterrupted()){System.out.println(线程在执行...);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();Thread.sleep(5000);System.out.println(结束线程);t.interrupt();}
}1. 如果线程因为调用 wait/join/sleep 等方法而阻塞挂起则以 InterruptedException 异常的形式通 知清除中断标志当出现 InterruptedException 的时候, 要不要结束线程取决于 catch 中代码的写法. 可以选择忽略这个异常, 也可以跳出循环结束线程. 2.否则只是内部的一个中断标志被设置t可以通过Thread.interrupted() 判断当前线程的中断标志被设置清除中断标志Thread.currentThread().isInterrupted() 判断指定线程的中断标志被设置不清除中断标志这种方式通知收到的更及时即使线程正在 sleep 也可以马上收到。
6.等待一个进程
有时我们需要等待一个线程完成它的工作后才能进行自己的下一步工作。这时我们需要一个方法明确等待线程的结束
方法说明public void join()等待线程结束public void join(long millis)等待线程结束最多等 millis 毫秒public void join(long millis, int nanos)同理但可以更高精度
import java.util.Random;public class demo1 {public static int tmp1;public static int tmp2;public static void main(String[] args) throws InterruptedException {int[] array new int[10000000];Random random new Random();for (int i 0; i array.length; i) {int n random.nextInt(100);array[i] n;}long time1 System.currentTimeMillis();Thread t1 new Thread(()-{for (int i 0; i array.length; i2) {tmp1array[i];}});Thread t2 new Thread(() -{for (int i 1; i array.length; i2) {tmp2array[i];}});t1.start();t2.start();t1.join();t2.join();System.out.println(数组中的随机数总和(tmp1tmp2));long time2 System.currentTimeMillis();System.out.println(程序运行时间 (time2-time1)ms );}
}如果把这两个join注释的话 7.获取当前线程引用
方法说明public static Thread currentThread();返回当前线程对象的引用 public static void main(String[] args) {Thread t Thread.currentThread();System.out.println(t.getName());}