第四天Java学习之路

建议新手观看,大佬勿喷,个人理解

今天来讲解以下线程

什么是线程?
简单来说,一个程序至少有一个进程,一个进程至少有一个线程!
概念: 线程是操作系统调度的最小单元,也叫轻量级进程。它被包含在进程之中,是进程中的实际运作单位。同一进程可以创建多个线程,每个进程都有自己独立的一块内存空间。并且能够访问共享的内存变量。”

了解一下线程的生命周期

在这里插入图片描述
创建: 指的是线程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中的线程池,必须先了解这个类。

  1. newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

  2. newFixedThreadPool 创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。

  3. newSingleThreadExecutor 创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。如果这个线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。

  4. newScheduleThreadPool 创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。

这边有个博客写的不错 线程池写的不错的博客点击查看

看完应该也明白了,剩下的就多多去练习,接下来讲Socket

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值