线程
线程的概念:说到线程的概念,我们不得不提到进程。
进程:是指一个内存中运行的应用程序,每一个进程都有一个独立的内存空间。
线程:1、是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个线程 。 2、线程实际上是在进程的基础上进一步划分的,一个进程启动之后,里面若干个执行路径又可以划分成若干个线程。
一、线程如何创建:
线程有三种创建方法:
常见的两种方式是分别是继承Thread类,实现Runnable接口。第三种比较少见
1.继承Thread类创建线程
首先需要创建一个类,这个继承了Thread类的类就是一个线程的类,在继承之后需要重写一下run方法,也就是线程要执行的任务,这里的代码就是一条新的执行路径。而这个执行路径的触发方式,不是调用run()方法,而是通过thread对象的start()方法来启动任务。
2.实现Runnable接口
首先,要创建一个类,并且实现Runnable接口,并实现里面的抽象方法run(),方法中执行的是线程的任务。此时理解为这个类里面存放的是即将要被线程执行的任务。
接下来将这个类实例化,再new一个线程,Thread的()里面参数是r,也就是线程的任务,再通过start()去触发这个执行路径。
MyRunnable r = new Runnable();
Thread t = new Thread(r);
t.start();
这是实现Runnable的线程创建方式。
二、Thread类的各种常用方法:
我们先来看看Thread类的构造方法:
Thread类不仅可以传入Runnable类型的任务,还可以给线程取一个名字。
守护线程和用户线程:在Thread()中有一个方法:setDaemon(boolean on),这个方法的作用是将此线程标记为守护线程。(守护线程是用来守护用户线程的,当用户线程全部死亡后,守护线程也随之死亡,它是依附于用户线程的)
接下来,我们来看看线程的常用方法 -> 设置和获取正在执行的线程名称
Thread.currentThread().getName();
-> 线程的指定时间休眠(单位是毫秒)
Thread.sleep(100ms);
-> 线程中断(线程是一个独立的执行路径,它是否应该结束,应该由其自身决定)
当检测到t1的中断标记后,就会检测到异常。可以说是人为的让线程中止,常见的方法有sleep(),wait(),这些方法中都有中断标记,会让线程中断。
Thread t1 = new Thread(