线程
文章平均质量分 63
czw10000
这个作者很懒,什么都没留下…
展开
-
java 多线程 实现多个线程的顺序执行
场景 编写一个程序,启动三个线程,三个线程的name分别是A,B,C;,每个线程将自己的ID值在屏幕上打印5遍,打印顺序是ABCABC… 使用 synchronized 实现 这里的判断条件中用的是 while 而不是 if , 这两者之间有什么区别呢? 线程从 wait 状态被唤醒,并且获得锁以后会继续往下执行,比如 A 调用nofityAll() 唤醒 B,C,这时 B与C谁会先获得锁是不确定的。如果是C先获得了锁,那么C就继续往下执行打印,这与我们的期望的不符。所以这里我们使用了一个 while,当C原创 2020-12-20 18:06:04 · 172 阅读 · 0 评论 -
线程池
概念: 线程池:其实就是一个可以容纳多个线程的容器,其中的线程可以反复的使用,省去了频繁的创建线程对象的操作,无需反复创建线程而耗费过多的系统资源 由于线程池中有很多操作都是与优化系统资源有关的,我们今天先来介绍下线程池的工作原理 2. 合理的利用线程池能够带来的什么样的好处 降低资源消耗。减少了线程的创建与销毁的次数,每个工作线程都可以被重复利用,可以执行多个任务 提高了响应速度。当任务到达时,任务可以不需要等到线程的创建就能立即执行 提高了线程的可管理性,可以根据系统的承受能力,调整线程池中的工作线.原创 2020-12-13 20:42:55 · 89 阅读 · 0 评论 -
生产者与消费者问题
生产者与消费者问题 等待唤醒机制经典的案例就是***生产者与消费者***的问题。 举一个例子:生产包子与消费包子来描述等待唤醒机制如何有效的利用资源: 代码示例: /* * 资源类:包子类 * 设置包子的属性 * 皮 * 馅 * 包子的状态 有 true 没有 false */ public class Baozi { // 皮 String pi; // 馅 String xian; // 包子的状态 有 true 没有 false,设置初原创 2020-12-13 19:57:03 · 319 阅读 · 1 评论 -
等待唤醒机制
线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却有不相同 比如说,线程A用来生产一个娃哈哈饮料,线程B用来消费娃哈哈饮料,娃哈哈饮料可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。 图例如下: 为什么要处理线程之间的通信: 多个线程并发在执行时,在默认情况下CPU是随机切换线程的,当我们需要多个线程共同来完成一件任务时,并且我们希望他们有规律的执行,那么多线程之间就需要一些协调通信,以此来帮助我们达到多线程共同操作原创 2020-12-13 19:43:57 · 191 阅读 · 0 评论 -
线程状态
概述 当线程被创建并启动之后,它即不是已启动就进入到了执行状态,也不是一直处于执行状态。在线程的生命周期中有6种状态 在JavaAPI帮助文档中java.lang.Thread.State这个枚举给出了线程的6种状态。 线程状态 导致状态发生条件 NEW新建 线程刚被创建,但是还没有启动,还没有调用start方法 RUNNABLE(可运行) 线程可以在java虚拟机中运行的状态,可以是正在运行自己的代码,也可能没有,这取决于操作系统处理器 BLOCKED(锁阻塞) 当一个线程试图.原创 2020-12-13 19:22:36 · 67 阅读 · 1 评论 -
程序的同步
线程的同步:(synchronized) 当我们使用多线程访问同一资源的时候,且这多个线程中对资源有的写的操作,就容器出现线程安全问题。 要解决多线程并发访问一个资源的安全问题,java中提供了同步机制(synchronized)来解决。 原理: 窗口1线程进入操作的时候,窗口2和窗口3线程只能在外面等着,当窗口1线程操作结束,窗口1和窗口2和窗口3才有机会进入代码中去执行。也就是说某个线程修改共享资源的时候,其他线程不能修改共享资源,等待修改完毕同步后,才能去抢夺cpu的使用资源,完成对应的操作,保证..原创 2020-12-13 16:46:41 · 427 阅读 · 0 评论 -
线程安全
线程安全: 如果有多个线程在同时的运行,而这些线程可能同时在运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的值一样的,就是线程安全的 通过葫芦娃大战奥特曼的案例发现,当多个线程去共享同一个资源的时候出现了线程的不安全的问题 1.相同的票数,被卖了多次 2.不存在的票,也被卖出去了,比如说0和-1 这种问题,几个窗口(线程)票数不同步,这种问题我们称之为线程不安全 备注: 线程安全问题一般都是由全局变量或者静态变量引起的,若每个线程中对全局变量、静态.原创 2020-12-13 16:20:23 · 65 阅读 · 0 评论 -
匿名内部类方式实现多线程程序的创建
使用线程的匿名内部类方式,可以很方便的实现每个线程执行不同的线程任务操作。 使用匿名内部类方式实现Runnable接口的run方法。 public static void main(String[] args) { // 创建线程对象 //new Thread().start(); new Thread() { // 重写run方法 @Override public void run() { // 循环20次,打印循环的次数 for (int i = 0; i原创 2020-12-13 16:08:02 · 145 阅读 · 0 评论 -
Thread类和Runnable接口的区别
如果一个类继承了Thread类,则不适合资源的共享,但是如果实现了Runnable接口的话,则很容易实现资源共享 实现Runnable接口比继承Thread类的所具有的优势: 1. 适合多个相同的程序代码的线程去共享同一个资源 2. 可以避免java中单继承的局限性 3. 增强了程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程可以实现分离 4. 线程池只能放入实现Runnable或者Callable类的线程,不能直接放入继承Thread的类 备注: 在java中,每次程序运行至少启动两个线程原创 2020-12-13 15:56:49 · 482 阅读 · 0 评论 -
创建线程的方式二
创建线程的方式有两种:一种是继承Thread类,一种是实现Runnable接口 实现Runnable接口创建线程对象 步骤: 1. 定义Runnable接口的实现类,并重写该接口的run方法,该run方法的方法体同样是该线程的线程执行体 2. 创建Runnable接口实现类的实例,并以此实例作为Thread类的target来创建Thread类的对象,该Thread类的对象才是真正的线程对象 3. 调用线程对象的start()方法来启动新线程 代码: // 实现Runnable接口实现类 实现了两个 pa原创 2020-12-13 15:35:00 · 74 阅读 · 0 评论 -
Thread类API
定义了有关线程的方法 构造方法: public Thread(); 分配一个指定名字的新的线程对象 public Thread(String name); 分配一个指定名字的新的线程对象 public Thread(Runnable target); 分配一个带有指定目标新的线程对象 public Thread(Runnable target,String name); 分配一个带有指定目标的和带有指定名字的新的线程对象 常用方法 public String getName();获取当前线程的名称原创 2020-12-13 15:04:21 · 78 阅读 · 0 评论 -
多线程的原理
多线程的原理 程序启动运行main时候,java虚拟机启动一个进程,主线程main在main调用的时候被创建。随着调用oneThread对象的start方法,另外一个新的线程也启动了,这样,整个应用就在多线程环境下运行着。 通过上面一张图可以发现多线程在内存当中的执行流程。 多个线程执行时,在栈内存当中,其实每一个线程都有一片属于自己的栈内存空间,进行方法的压栈和弹栈。 当执行线程的任务结束了,线程自动在栈内存当中释放了。当所有的执行线程都结束了,那么进程也就结束了。 ...原创 2020-12-12 23:49:40 · 290 阅读 · 0 评论 -
创建线程方式一--继承Thread类
1. 创建线程类 java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或者Thread类的子类的实例。每个线程的作用是完成一定的任务。实际上就是执行一段程序流。java使用线程执行体来代表这段程序流 java中通过继承Thread类来创建并启动多线程,步骤如下: 1. 创建一个Thread类的子类 2. 在Thread类的子类当中重写Thread类的run方法,设置线程的任务(开启线程需要你做什么事情) 3. 创建Thread类的子类对象 4. 调原创 2020-12-12 23:35:49 · 636 阅读 · 0 评论 -
多线程
并发与并行 并发: 强调同一时间段内发生 并行:强调同一时刻同时发生 线程与进程 进程: 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个线程;进程也就是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序就是一个进程从创建、运行到消亡的过程。 线程:线程是进程中的一个执行单位,负责当前进程中程序的运行,一个程序中至少有一个线程。一个进程可以有多个线程,这个应用程序也可以称为多线程程序 一个程序至少一个进程,一个进程可以有多个线程 线程调度 分时调度:.原创 2020-12-12 23:11:44 · 49 阅读 · 0 评论