摘要:一、生产者消费者模型的概念 二、仓库类的原理 三、编程代码 package com.yanqi.task18; /** * 编程实现仓库类 */ public class StoreHouse { private int cnt = 0; // 用于记录产品的数量 public synchroniz
阅读全文
摘要:一、线程安全和死锁问题 ### 静态方法的锁定 ——> 当我们对一个静态方法加锁,如: ——> public synchronized static void xxx(){….} ——> 那么该方法锁的对象是类对象。每个类都有唯一的一个类对象。 ——> 获取类对象的方式:类名.class。 ——>
阅读全文
摘要:一、使用Lock(锁)实现线程同步 ### 基本概念 ——> 从Java5开始提供了更强大的线程同步机制—使用显式定义的同步锁对象来实现。 ——> java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。 ——> 该接口的主要实现类是Reentran
阅读全文
摘要:一、object类常用的方法 方法声明 功能介绍 void wait() 用于使得线程进入等待状态,直到其它线程调用notify()或notifyAll()方法 void wait(longtimeout) 用于进入等待状态,直到其它线程调用方法或参数指定的毫秒数已经过去为止 void notify
阅读全文
摘要:一、线程同步机制的概念和由来 ### 线程同步机制的概念和由来 ——> [线程同步机制的概念和由来] ——> [同步代码块实现线程同步的方式一] ——> [同步方法实现线程同步的方式二] ### 线程同步机制(重点) ### 基本概念 ——> 当多个线程同时访问同一种共享资源时,可能会造成数据的覆盖
阅读全文
摘要:一、同步带吗块实现同步方式二 package com.yanqi.task18; public class AccountThreadTest extends Thread { private int balance; // 用于描述账户的余额 private static Demo dm = ne
阅读全文
摘要:一、守护线程 package com.yanqi.task18; public class ThreadDaemonTest extends Thread { @Override public void run() { //System.out.println(isDaemon()? "该线程是守护
阅读全文
摘要:一、多个线程执行不同的代码 ### 案例题目 ——> 编程创建两个线程,线程一负责打印1 ~ 100之间的所有奇数, ——> 其中线程二负责打印1 ~ 100之间的所有偶数。 ——> 在main方法启动上述两个线程同时执行,主线程等待两个线程终止。 二、编程代码 package com.yanqi.
阅读全文
摘要:一、线程优先级的管理 package com.yanqi.task18; public class ThreadPriorityTest extends Thread { @Override public void run() { //System.out.println("子线程的优先级是:" +
阅读全文
摘要:一、线程的等待 package com.yanqi.task18; public class ThreadJoinTest extends Thread { @Override public void run() { // 模拟倒数10个数的效果 System.out.println("倒计时开始.
阅读全文
摘要:一、sleep方法的使用:常用的方法(重点) 方法声明 功能介绍 static void yield() 当前线程让出处理器(离开Running状态),使当前线程进入Runnable状态等待 static void sleep(times) 使当前线程从 Running 放弃处理器进入Block状态
阅读全文
摘要:一、继承方式管理线程编号和名称 ### 案例题目 ——> 自定义类继承Thread类并重写run方法, ——> 在run方法中先打印当前线程的编号和名称,然后将线程 ——> 的名称修改为"zhangfei"后再次打印编号和名称。 ——> 要求在main方法中也要打印主线程的编号和名称。 二、编程代码
阅读全文
摘要:一、实现方式管理线程编号和名称 ### 案例题目 ——> 自定义类继承Thread类并重写run方法, ——> 在run方法中先打印当前线程的编号和名称,然后将线程 ——> 的名称修改为"zhangfei"后再次打印编号和名称。 ——> 要求在main方法中也要打印主线程的编号和名称。 二、编程代码
阅读全文
摘要:一、匿名内部类的方式实现线程创建和启动 ### 匿名内部类的方式 ——> 使用匿名内部类的方式来创建和启动线程。 二、编程代码 package com.yanqi.task18; public class ThreadNoNameTest { public static void main(Stri
阅读全文
摘要:一、线程的声明周期: ### 线程的生命周期(熟悉) ——> 新建状态 - 使用new关键字创建之后进入的状态,此时线程并没有开始执行。 ——> 就绪状态 - 调用start方法后进入的状态,此时线程还是没有开始执行。 ——> 运行状态 - 使用线程调度器调用该线程后进入的状态,此时线程开始执行,
阅读全文
摘要:一、线程创建和启动的方式 ### 方式的比较 ——> 继承Thread类的方式代码简单,但是若该类继承Thread类后则无法继承其它类, ——> 而实现Runnable接口的方式代码复杂,但不影响该类继承其它类以及实现其它接口, ——> 因此以后的开发推荐使用第二种方式。 二、编程代码 packag
阅读全文
摘要:一、线程创建和启动方式 package com.yanqi.task18; public class SubRunnableRun implements Runnable { @Override public void run() { // 打印1 ~ 20之间的所有整数 for (int i =
阅读全文
摘要:一、线程的创建(重中之重) ### 线程的创建(重中之重) ——> [线程的概念和执行原理]——[线程的创建方式和相关方法] ### Thread类的概念 ——> java.lang.Thread类代表线程,任何线程对象都是Thread类(子类)的实例。 ——> Thread类是线程的模板,封装了复
阅读全文
摘要:一、程序和进程的概念 ### 程序和进程的概念 ——> 程序 - 数据结构 + 算法,主要指存放在硬盘上的可执行文件。 ——> 进程 - 主要指运行在内存中的可执行文件。 ——> 目前主流的操作系统都支持多进程,为了让操作系统同时可以执行多个任务, ——> 但进程是重量级的,也就是新建一个进程会消耗
阅读全文
摘要:NO: Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of
阅读全文