java多线程
大毛z
这个作者很懒,什么都没留下…
展开
-
java多线程-- 线程池( Executors.newFixedThreadPool() )
线程池执行结果package cn.usts.edu.lesson08;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 线程池: * 线程的创建和销毁很烦,于是就出现了线程池,当线程闲置的时候就放置到池子中 * 当需要线程的时候就到池子中去取出 * 提高线程的利用率 * */public class ThreadPoolDemo { public原创 2021-10-26 18:11:46 · 1323 阅读 · 0 评论 -
java多线程-- 信号灯法则
信号灯法则利用标志位,控制生产和消费生产一个消费一个package cn.usts.edu.lesson08;public class TrafficLightDemo { public static void main(String[] args) { Googs googs = new Googs(); new Productor1(googs).start(); new Consumer1(googs).start(); }}原创 2021-10-26 17:08:24 · 120 阅读 · 0 评论 -
java多线程-- 生产者消费者
生产者消费者问题编程模型:有一家店,有很多人来,为了提升顾客体验,前台可以放10份餐,不足10份后厨就会通知后厨补上,如果到10份就停止生产.,只要前台有餐就通知顾客取餐,没有餐让顾客等待.代码有问题,希望大佬指点下进程会一直卡在这里package cn.usts.edu.lesson08;import cn.usts.util.Utils;/** * 生产者消费之 * 一个资源被需要,才会被创建, * 在生产者和消费者中间还有一个容器作为缓冲,作为一个生产的标志 * *原创 2021-10-26 15:03:14 · 565 阅读 · 0 评论 -
java多线程--ReentrantLock ( Lock上锁 \ 解锁 )
Lock 的应用可重复性锁,相比传统的synchronizedReentrantLock更直观,直观上锁解锁package cn.usts.edu.lesson08;import java.util.concurrent.locks.ReentrantLock;/** * 可重复性锁,相比传统的synchronized * ReentrantLock更直观,直观上锁解锁 * */public class LockDemo implements Runnable{ pr原创 2021-10-24 16:50:55 · 281 阅读 · 0 评论 -
java多线程-- 死锁模拟( synchronized )
死锁模拟编程模型 化妆需要镜子,口红 两个人分别拿到镜子和口红,谁都不让谁,都想拿到对方手里的资源 就造成了死锁的问题程序一直处于等待状态package cn.usts.edu.lesson07;/** * 编程模型 * 化妆需要镜子,口红 * 两个人分别拿到镜子和口红,谁都不让谁,都想拿到对方手里的资源 * 就造成了死锁的问题 * * 解决方案: * 不能拿对方的锁 * * * */public cla原创 2021-10-24 16:32:10 · 466 阅读 · 0 评论 -
java多线程-- CopyOnWriteArrayList
测试jdk内置的安全集合package cn.usts.edu.lesson07;import java.util.concurrent.CopyOnWriteArrayList;/** * 测试jdk内置的安全集合 * */public class CopyOnWriteArrayListDemo { public static void main(String[] args) { CopyOnWriteArrayList<String> list =原创 2021-10-24 14:55:34 · 124 阅读 · 0 评论 -
java多线程-- 线程不安全三大案例(银行账户同时取钱问题 、 网上买票问题 、 线程不安全集合)(同步块,同步方法)
银行账户同时取钱问题package cn.usts.edu.lesson07;/** * 编程模型: A,B共有一个账户,俩人一块要取钱,都在手机上操作 * 账户上有100, A取要90,B要取80; * 连个人同时看到都有100.都可以取出, * 所以问题就产生了. * */public class UnSafeBank { public static void main(String[] args) { Account account = new Accou原创 2021-10-23 17:16:50 · 2921 阅读 · 0 评论 -
java多线程-- thread.setDaemon(true) 守护线程简单实现
守护线程 ,就是当有其他线程开启时,守护线程就一直开启守护线程会在所有线程结束后自动结束,package cn.usts.edu.lesson06;/** * 守护线程 ,就是当有其他线程开启时,守护线程就一直开启 * 守护线程会在所有线程结束后自动结束 * */public class DaemonTest { public static void main(String[] args) { God god = new God(); You y.原创 2021-10-23 15:47:52 · 344 阅读 · 0 评论 -
java多线程-- thread.setPriority() 线程优先级
线程优先级不设置优先级,默认为 5先设置,在启动!!!优先级只是相对的,大概率下是优先级高的先执行,不是一定先执行package cn.usts.edu.lesson06;/** * 线程优先级 * 不设置优先级,默认为 5 * 先设置,在启动!!!! * * 优先级只是相对的,大概率下是优先级高的先执行,不是一定先执行 * */public class ThreadPriorityDemo implements Runnable{ @Override原创 2021-10-23 15:30:19 · 1044 阅读 · 0 评论 -
java多线程-- thread.getState() 查看线程状态
package cn.usts.edu.lesson06;/** * 一个线程可以在给定时间点处于一个状态。 这些状态是不反映任何操作系统线程状态的虚拟机状态。 * * 线程状态。 线程可以处于以下状态之一: * NEW 尚未启动的线程处于此状态。 * RUNNABLE 在Java虚拟机中执行的线程处于此状态。 * BLOCKED 被阻塞等待监视器锁定的线程处于此状态。 * WAITING 正在等待另一个线程..原创 2021-10-23 15:10:48 · 2290 阅读 · 0 评论 -
java多线程-- join(线程插队,优先执行)
使用join方法测试再main主线程执行的过程中 强行插入B线程测试结果是 main线程执行过程中,添加B线程,等待B线程执行完毕后,main线程接着执行一定要是这个顺序,thread.start();thread.join();注意start()和join的位置.很关键package cn.usts.edu.lesson06;/** * 使用join方法 * 测试再main主线程执行的过程中 强行插入B线程 * * 测试结果是 main线程执行过程中,添加B线程,等待B.原创 2021-10-23 14:48:03 · 538 阅读 · 0 评论 -
java多线程-- yield 线程礼让
yield 线程礼让加上礼让大概率会让被礼让的先执行.不是一定被礼让的先执行package cn.usts.edu.lesson06;/** * 线程礼让 * 礼让的线程会重新和竞争的线程再次公平竞争cpu的资源 * 再次竞争的结果为最后结果 * */public class ThreadYieldDemo implements Runnable{ @Override public void run() { System.out.println(Thr原创 2021-10-23 14:13:54 · 181 阅读 · 0 评论 -
java多线程-- sleep实现 ( 时间刷新 , 模拟倒计时)
时间刷新模拟倒计时时间刷新package cn.usts.edu.lesson06;import org.junit.Test;import java.text.SimpleDateFormat;import java.util.Date;/** * 时间刷新 * 模拟倒计时 * */public class TimeFlush { // 时间刷新 public static void main(String[] args) { Date.原创 2021-10-23 13:53:44 · 560 阅读 · 0 评论 -
java多线程-- 线程休眠(sleep)
模拟延时,放大问题package cn.usts.edu.lesson06;/** * 模拟延时,放大问题 * */public class ThreadSleepDemo implements Runnable{ private int tickets =10; // 设置10张票 @Override public void run() { while (true){ if (tickets>0){ .原创 2021-10-23 13:31:28 · 182 阅读 · 0 评论 -
java多线程-- 线程停止
测试线程停止建议线程正常停止,非强行停止---->利用次数控制,不建议死循环建议使用标志位(flag)—>设置一个标志位不要使用stop和destroy方法和jdk不建议使用的方法package cn.usts.edu.lesson06;/** * 测试线程stop * 建议线程正常停止,非强行停止---->利用次数控制,不建议死循环 * 建议使用标志位(flag)--->设置一个标志位 * 不要使用stop和destroy方法和jdk不建议使用的方法 * .原创 2021-10-23 13:01:57 · 211 阅读 · 0 评论 -
java多线程-- lambda表达式(实现原理, 4行代码 最简单的实现 )
lambda表达式就是将函数式接口直接实现普通的实现是先new一个类实现接口,然后再通过类.方法去调用实现的方法.lambda是直接省略了new一个类去实现接口中的方法.lambda的实现过程方法1-方法4逐渐简化.大体的实现原理就是不通过实体类实现接口中的方法注意[接口中的方法只有一个–(函数式接口)]接口接收实体类和类接收实体类的区别package cn.usts.edu.lesson05;/** * lambda的实现过程 * 方法1-方法4逐渐简化. * 大体的实现原原创 2021-10-22 19:45:30 · 402 阅读 · 0 评论 -
java多线程-- 静态代理(简单剖析)
静态代理就是创建一个A对象代替B对象去干活,把认为不重要的事情交给A(代理)去做到主要时候换B上厂,有点明星请替身的滋味package cn.usts.edu.lesson04;/** * 静态代理 * 就是创建一个A对象代替B对象去干活, * 把认为不重要的事情交给A(代理)去做 * 到主要时候换B上厂,有点明星请替身的滋味 * */interface Marry{ void doMarry(String name);}// 你去实现Marry接口class原创 2021-10-22 16:28:27 · 67 阅读 · 0 评论 -
java多线程-- Callable接口简单应用
使用callable接口的四个步骤1.创建执行服务2.提交执行服务3.获取执行结果4.关闭服务package cn.usts.edu.lesson03;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.URL;import java.util.concurrent.*;/** * 使用callable接口 * 1.创建执原创 2021-10-22 16:00:22 · 236 阅读 · 0 评论 -
java多线程--龟兔赛跑
package cn.usts.edu.lesson03;/** * 龟兔赛跑多线程来实现 * 乌龟和兔子分别在不同的线程,同时开始 * */public class TortoiseRabbitRace implements Runnable{ String winner; @Override public void run() { for (int i = 1; i < 101; i++) { boolean flag原创 2021-10-22 15:29:53 · 160 阅读 · 0 评论 -
java多线程-- 初识多线程的问题(简单案例)
没有控制的并发会导致数据的不一致package cn.usts.edu.lesson02;/** * 并发会导致对数据的访问有问题 * */public class ThreadProblem implements Runnable{ private int tickets=10; @Override public void run() { String threadName = Thread.currentThread().getName(); /原创 2021-10-22 14:03:40 · 131 阅读 · 0 评论 -
java多线程-- Runnable简单实现(例子)
package cn.usts.edu.lesson01;public class RunnableSimpleDemo implements Runnable{ @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println("吃第"+i+"个馒头"); } } public static void main(原创 2021-10-20 18:36:07 · 499 阅读 · 0 评论 -
java多线程-- Runnable接口实现多线程网图下载
Runnable接口实现多线程package cn.usts.edu.lesson01;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.URL;/** * Runnable接口实现多线程 * 推荐使用Runnable接口,因为继承Thread的话一个类只能继承一个类 * thread的底层就是实现了Runnable接口【class原创 2021-10-20 18:33:54 · 115 阅读 · 0 评论 -
java多线程-- 网图多线程下载
多线程同时下载多张图片package cn.usts.edu.lesson01;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.URL;/** * 练习Thread * 实现多线程同时下载 * */public class ThreadImageDownload extends Thread{ String file;原创 2021-10-20 17:21:50 · 143 阅读 · 0 评论 -
java多线程-- 简单实现多线程
注意start() 和run()的区别package cn.usts.edu.lesson01;/** * 实现多线程要 * 1:继承Thread类, * 2:重写run()方法 * 3:实现类.start() * * 【以吃馒头喝水为例】 * 吃馒头和喝水同时进行 * * //thread.start();// 同时执行 * //thread.run();//使用run()方法就是按顺序执行 * */public class ThreadCreateDemo01 e原创 2021-10-20 16:00:45 · 92 阅读 · 0 评论