随笔分类 - 多线程
摘要:ThreadLocal 在学习ThreadLocal之前,我们需要先确认一个事情,就是客户端发送的每次http请求,对应的在服务端都会分配一个新的线程来处理, 瑞吉外卖 在处理过程中涉及到下面类中的方法都属于相同的一个线程:1、LoginCheckFilter的doFilter方法2、Employe
阅读全文
摘要:线程的状态线程的状态:也就是线程从生到死的过程,以及中间经历的各种状态及状态转换。理解线程的状态有利于提升并发编程的理解能力。 Java线程的状态Java总共定义了6种状态6种状态都定义在Thread类的内部枚举类中。 public class Thread{ ... public enum Sta
阅读全文
摘要:并发与并行 正在运行的程序(软件)就是一个独立的进程, 线程是属于进程的,多个线程其实是并发与并行同时进行的。 并发的理解:CPU同时处理线程的数量有限。CPU会轮询为系统的每个线程服务,由于CPU切换的速度很快,给我们的感觉这些线程在同时执行,这就是并发。 一个人做8件事 挨着去做 轮询做 每一刻
阅读全文
摘要:线程池如何处理Callable任务 线程池如何处理Callable任务,并得到任务执行完后返回的结果。使用ExecutorService的方法:Future<T> submit(Callable<T> command) package com.itheima.d8_threadpool; impor
阅读全文
摘要:线程池如何处理Runnable任务 使用ExecutorService的方法:void execute(Runnable target) package com.itheima.d8_threadpool; public class MyRunnable implements Runnable{ @
阅读全文
摘要:线程池 什么是线程池?线程池就是一个可以复用线程的技术。不使用线程池的问题 如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。 JDK 5.0起提供了代表线程池的接口:ExecutorService如何得到线程池对
阅读全文
摘要:方式二:同步方法 同步方法作用:把出现线程安全问题的核心方法给上锁。原理:每次只能一个线程进入,执行完毕以后自动解锁,其他线程才可以进来执行。修饰符 synchronized 返回值类型 方法名称(形参列表) { 操作共享资源的代码 } public synchronized void drawMo
阅读全文
摘要:方式三:Lock锁 Lock锁为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock,更加灵活、方便。Lock实现提供比使用synchronized方法和语句可以获得更广泛的锁定操作。Lock是接口不能直接实例化,这里采用它的实现类ReentrantLock来构建Lock锁对象。
阅读全文
摘要:线程同步:为了解决线程安全问题。 1、取钱案例出现问题的原因?多个线程同时执行,发现账户都是够钱的。 2、如何才能保证线程安全呢?让多个线程实现先后依次访问共享资源,这样就解决了安全问题 线程同步的核心思想加锁,把共享资源进行上锁,每次只能一个线程进入访问完毕以后解锁,然后其他线程才能进来。 线程同
阅读全文
摘要:thread常用API说明 1. 当有很多线程在执行的时候,我们怎么去区分这些线程呢?此时需要使用Thread的常用方法:getName()、setName()、currentThread()等。 1、此方法是Thread类的静态方法,可以直接使用Thread类调用。 2、这个方法是在哪个线程执行中
阅读全文
摘要:方式二:实现Runnable接口 定义一个线程任务类MyRunnable实现Runnable接口,重写run()方法创建MyRunnable任务对象把MyRunnable任务对象交给Thread处理。调用线程对象的start()方法启动线程 package com.po.thread2; /** 1
阅读全文
摘要:方式三:JDK 5.0新增:利用Callable、FutureTask接口实现。 得到任务对象定义类实现Callable接口,重写call方法,封装要做的事情。用FutureTask把Callable对象封装成线程任务对象。、把线程任务对象交给Thread处理。、调用Thread的start方法启动
阅读全文
摘要:多线程的创建方式一:继承Thread类 Java是通过java.lang.Thread 类来代表线程的。 按照面向对象的思想,Thread类应该提供了实现多线程的方式。 步骤: 定义一个子类MyThread继承线程类java.lang.Thread,重写run()方法创建MyThread类的对象调用
阅读全文