建议新手观看,大佬勿喷,个人理解
今天来讲解以下线程
什么是线程?
简单来说,一个程序至少有一个进程,一个进程至少有一个线程!
概念: 线程是操作系统调度的最小单元,也叫轻量级进程。它被包含在进程之中,是进程中的实际运作单位。同一进程可以创建多个线程,每个进程都有自己独立的一块内存空间。并且能够访问共享的内存变量。”
了解一下线程的生命周期
创建: 指的是线程new出来后就属于创建。
就绪状态: 调用start() 进入线程的就绪状态,但是还不是运行!
运行状态: 当系统CPU获得时间的调度后 进入运行状态。
阻塞: 当在运行之中,当调用 Sleep() wait() yelid() 等方法之后线程会进入阻塞状态。
解除阻塞: sleep() 的话 等待时间结束后重新等待系统调度。wait的话 notify()唤醒。
线程死亡: 当程序结束之后,或者调用 stop()等方法之后会死亡。
实现线程的三种方式
Thread
public class XiaoCheng extends Thread {
@Override
public void run() {
super.run();
}
}
启动的方式
public static void main(String[] args) {
XiaoCheng cheng = new XiaoCheng();
cheng.start();
}
Runnalble实现接口的方式
public class XiaoCheng implements Runnable {
@Override
public void run() {
}
启动的方式
public static void main(String[] args) {
XiaoCheng cheng = new XiaoCheng();
Thread thread = new Thread(cheng);
thread.start();
}
Callable
public class XiaoCheng implements Callable {
@Override
public Object call() throws Exception {
return null;
}
}
重写的是Call 方法 有返回值 有抛异常 注意注意!!!!!
启动的方式
public class Test09 {
public static void main(String[] args) {
XiaoCheng cheng = new XiaoCheng();
FutureTask futureTask = new FutureTask(cheng);
new Thread(futureTask).start();
}
}
大家有没有发现,不管是runnable还是Callable 都是依靠Thread 来运行的,这说明Thread是它们的载体,也可以理解为是他们的大哥!!!
多线程方法
currentThread()方法
currentThread()方法可返回代码段正在被哪个线程调用的信息。
Thread.currentThread().getName()
isAlive()方法
方法isAlive()的功能是判断当前的线程是否处于活动状态。
thread.isAlive();
sleep()方法
方法sleep()的作用是在指定的毫秒数内让当前"正在执行的线程"休眠(暂停执行)。这个"正在执行的线程"是指this.currentThread()返回的线程。
Thread.sleep()
getId()方法
getId()方法的作用是取得线程的唯一标识。
thread.getId()
编程行业本身就要多多去琢磨,所以靠自己多去练习了
线程池
线程池是什么?
概念: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池。
线程池有几种?
java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类。
-
newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
-
newFixedThreadPool 创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。
-
newSingleThreadExecutor 创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。如果这个线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。
-
newScheduleThreadPool 创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。
这边有个博客写的不错 线程池写的不错的博客点击查看