自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 记录一次错误:JavaScript 回调函数中的 return false 问题

项目中js文件中的一个功能函数:// 注册邮箱校验function validateEmail() { var id = "email"; var flag = 1; //获取输入文本框内容 var value = $("#"+id).val(); //1.非空校验 if(!value){ //先获取对应的label,再添加错误信息,最后显示label并返回一个false $("#"+id+"Error").text("

2021-08-24 16:37:06 1191

原创 使用sleep方法,线程进入sleep休眠状态不会释放锁

之前在学习Lock锁时,写了一个买票的案例,其中因为sleep不会释放锁,所以导致输出结果不会出现交叉。这里单独把这一个问题写出来原代码:package com.kuang.thread.lock;import java.util.concurrent.locks.ReentrantLock;/** * @ClassName TestLock * @Description lock锁 * @Author 麻虾 * @Date 2021/6/1 14:55 55 * @Vers

2021-06-01 23:12:30 3269 4

原创 Lock(锁)

Lock(锁):从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当 java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。 锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象 ReentrantLock(可重入锁)类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较.

2021-06-01 23:11:48 359

原创 死锁DeadLock

package com.kuang.thread;import com.sun.org.apache.bcel.internal.generic.NEW;/** * @ClassName DeadLock * @Description 死锁 * @Author 麻虾 * @Date 2021/5/31 22:16 16 * @Version 1.0 *///化妆的案例//死锁:多个线程互相抱着对方需要的资源不释放,然后就一直互相等待,形成僵持public class DeadL..

2021-05-31 23:40:23 103

原创 三大不安全案例:线程不安全的集合

package com.kuang.thread.syn;import java.util.ArrayList;import java.util.List;/** * @ClassName UnsafeList * @Description 三大不安全案例:线程不安全的集合 * @Author 麻虾 * @Date 2021/5/31 16:36 36 * @Version 1.0 */public class UnsafeList { public static voi

2021-05-31 23:26:55 95

原创 三大不安全案例:不安全的买票

package com.kuang.thread.syn;/** * @ClassName UnsafeBuyTickets * @Description 三大不安全案例:不安全的买票 * @Author 麻虾 * @Date 2021/5/31 14:48 48 * @Version 1.0 */public class UnsafeBuyTickets{ public static void main(String[] args) { //创建线程对象

2021-05-31 23:23:35 92

原创 线程三大不安全案例:不安全的取钱

package com.kuang.thread.syn;/** * @ClassName UnsafeBank * @Description 三大不安全案例:不安全的取钱 * @Author 麻虾 * @Date 2021/5/31 15:31 31 * @Version 1.0 *///两个人取钱public class UnsafeBank { public static void main(String[] args) { //创建一个账户

2021-05-31 23:17:34 103

原创 线程同步 synchronized

线程同步什么是线程同步?我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。同步这个词是从英文synchronize(使同时发生)翻译过来的。我也不明白为什么要用这...

2021-05-09 23:49:51 268

原创 守护(daemon)线程

守护(daemon)线程线程分为用户线程和守护线程虚拟机必须确保用户线程执行完毕虚拟机不用等待守护线程执行完毕,用户线程停止,守护线程紧接着就会停止如,后台记录操作日志,监控内存,垃圾回收等待…-------守护线程就像上帝一样守护着你-------设置为守护线程thread.setDaemon(true);//默认是false,表示是用户线程,正常的线程都是用户线程示例package com.kuang.thread;/** * @ClassName TestDaem

2021-05-09 21:29:07 116

原创 线程的优先级 Priority

Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。线程的优先级用数字表示,范围从1~10.Thread.MIN_PRIORITY = 1;Thread.MAX_PRIORITY = 10;Thread.NORM_PRIORITY = 5;- 线程优先级高的,不一定先执行,是由CPU调度的,只是执行权重大了- 优先级低只是意味着获得调度的概率低.并不是优先级低就不会被调用了.这都是看CPU的调度- 记住一句话:线程只受CPU

2021-05-09 21:15:56 347

原创 观测线程状态 state

JDK帮助文档:线程状态。 线程可以处于以下状态之一:NEW 尚未启动的线程处于此状态。RUNNABLE 在Java虚拟机中执行的线程处于此状态。BLOCKED 被阻塞等待监视器锁定的线程处于此状态。WAITING 正在等待另一个线程执行特定动作的线程处于此状态。TIMED_WAITING 正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。TERMINATED 已退出的线程处于此状态。一个线程可以在给定时间点处于一个状态。 这些状态是不反映任何操作系统线程状态的虚

2021-05-09 21:05:19 144

原创 线程强制执行 join()

线程的join方法join()合并线程,待此线程执行完后,再执行其他的线程,其他线程进入阻塞状态 可以想象为插队 一般不会使用该方法,因为会造成线程阻塞测试join方法package com.kuang.thread;/** * @ClassName TestJoin * @Description 测试join方法 想象为插队 * @Author 麻虾 * @Date 2021/5/9 9:37 37 * @Version 1.0 *///测试join方法p

2021-05-09 20:45:22 111

原创 线程礼让yield()

线程礼让 yield()礼让线程就是让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态,让CPU重新调度,礼让线程不一定成功,要看CPU的心情 礼让线程不一定成功,只是该线程执行的权重变大,成不成功要看CPU的心情测试礼让线程package com.kuang.thread;/** * @ClassName TestYield * @Description 礼让线程 * @Author 麻虾 * @Date 2021/5/2 12:37 37 * @Ver.

2021-05-09 18:03:23 113

原创 线程休眠(sleep)

线程休眠:sleep()注意点:sleep(时间)指定当前线程阻塞的毫秒数 sleep存在异常InterruptedException sleep时间达到后线程进入就绪状态 sleep可以模拟网络延时,倒计时等 每一个对象都有一个锁,sleep不会释放锁;示例一:我们拿售票的例子演示模拟网络延迟上代码package com.kuang.thread;/** * @ClassName TestSleep1 * @Description 线程休眠 模拟网络延迟 *

2021-04-28 00:41:28 1329

原创 线程停止

线程停止建议强制停止线程的办法:建议线程正常停止--->利用次数,不建议死循环 建议使用标志位--->设置一个标志位 不要使用stop或者destory等过时或者jdk不建议使用的方法示例:测试停止线程(使用标志位停止线程)上代码:package com.kuang.thread;/** * @ClassName TestStop * @Description 线程停止 * @Author 麻虾 * @Date 2021/4/26 21:29 29 *

2021-04-27 23:58:50 127

原创 多线程(三)

线程创建方式三:实现Callable接口(了解即可)如何实现Callable接口:1.实现Callable接口,需要返回值类型2.重写call方法,需要抛出异常3.创建目标对象4.创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1);5.提交执行:Future<Boolean> result1 = ser.submit(t1);6.获取结果: boolean r1 = result1.get()7.关闭服

2021-04-27 23:40:00 107

原创 多线程练习(龟兔赛跑)

龟兔赛跑的故事里,兔子在比赛过程中睡觉输掉了比赛,乌龟赢得最终的比赛。我们就用龟兔赛跑这个小案例来练习一下我们的多线程。直接上代码:package com.kuang.thread;/** * @ClassName Race * @Description 龟兔赛跑 * @Author 麻虾 * @Date 2021/4/25 14:07 07 * @Version 1.0 */public class Race implements Runnable { //赛道

2021-04-27 23:23:49 1669

原创 静态代理

通过静态代理,深度剖析一下线程Thread类package com.kuang.thread;/** * @ClassName TestThread6 * @Description 静态代理 * @Author 麻虾 * @Date 2021/4/25 14:40 40 * @Version 1.0 *///深度剖析一下Thread类//静态代理模式总结://真实对象和代理对象都要实现同一个接口//代理对象要代理真实角色//好处://代理对象可以做很多真实对象做不了

2021-04-25 23:10:34 82

原创 初识并发问题(售票)

我们通过一个下面这个抢电影票的简单例子,认识一下并发问题:情景描述:多个人去抢20张电影票代码如下:package com.kuang.thread;/** * @ClassName TestThread4 * @Description 初识多线程 售票 * @Author 麻虾 * @Date 2021/4/24 15:12 12 * @Version 1.0 *///多个线程同时操作同一个对象//买火车票的例子//发现问题,多个线程操作同一个资源的情况下,数据紊乱

2021-04-24 17:30:44 476 1

原创 多线程(二)

创建线程方式二:实现Runnable接口(推荐使用!!!)实现Runnable接口创建线程大体上可以分为四步:创建一个类,实现Runnable接口紧接着重写run()方法创建Runnable接口的实现类对象启动线程:传入目标对象+Thread对象.start();(如:new Thread ( testThread3 ) . start( ) ; )推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用。 //一份资源 TestThread3 testThread3

2021-04-24 14:42:52 93

原创 多线程(一)

多线程进程(Process)、线程(Thread):进程:在操作系统中运行的就是进程,比如你的QQ,播放器,游戏等等。。。线程:一个进程可以有多个进程,如视频中同时可以听声音,看图像,看弹幕,等等Process & Thread:-说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身并没有任何运行的含义,是一个静态的概念。-而进程则是执行程序的一次执行过程,它是一个动态的概念。进程是系统资源分配的单位。-通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程

2021-04-23 13:08:11 917 2

原创 接口 interface

普通类:只有具体实现。抽象类:具体实现和规范(抽象方法)(约束)都有!(不能new,只有通过子类实现)。接口:只有规范!(约束)。 自己无法写方法,就是专业的约束! 约束和实现分离:面向接口编程~。-接口都必须要有实现类!一般实现类用Impl结尾 。-接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能.…”的思想。 如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。-接口的本质是 契约 ,就像我们人间的法律一样。.

2021-04-21 00:19:46 103

原创 抽象类 abstract

-abstract抽象类:不能new-extends有局限性,是单继承的。 (可以说:接口可以多继承 通过implements)-抽象方法就是一个 约束 ,只有方法名,没有具体方法实现 ~~有人帮我们实现 ( 没有{} )1.不能new一个抽象类,只能靠子类去实现它:约束!2.抽象类的所有方法都必须由其子类实现3.抽象类的子类,都必须实现它的方法, 除非子类也是抽象的,那就有孙子类实现,层层向下的4.抽象类中可以写普通方法5.抽象方法必须在抽象类中抽象类其实就是:抽象的抽象 :就.

2021-04-21 00:01:00 82

原创 static关键字

//当一个对象被创建时,//先执行 静态代码块,并且只在 第一次 执行,只执行 1 次,后面再创建对象就不会执行了//然后执行 匿名代码块//最后才是执行 构造方法代码块:静态代码块,匿名代码块package com.kuang.oop.demo6;/** * @ClassName Person * @Description 代码块 创建对象时的代码执行顺序 * @Author 麻虾 * @Date 2021/4/20 20:49 49 * @Version 1.0 */p.

2021-04-20 23:47:51 65

原创 instanceof & 类型转换

instanceof关键字: 判断两个类之间是否存在 父子 关系Person类(父):package com.kuang.oop.demo5;/** * @ClassName Person * @Description 什么是多态 * @Author 麻虾 * @Date 2021/4/19 21:57 57 * @Version 1.0 */public class Person { public void run(){ System.out.prin.

2021-04-20 12:22:14 112

原创 多态

父类Person:package com.kuang.oop.demo5;/** * @ClassName Person * @Description 什么是多态 * @Author 麻虾 * @Date 2021/4/19 21:57 57 * @Version 1.0 */public class Person { public void run(){ System.out.println("run"); } }子类Student:p

2021-04-19 23:58:04 67

原创 方法重写

父类B:package com.kuang.oop.demo4;/** * @ClassName B * @Description 方法重写 * @Author 麻虾 * @Date 2021/4/19 21:04 04 * @Version 1.0 *///重写都是方法的重写,和属性无关public class B { public void test(){ System.out.println("B-->test"); }}子类A:

2021-04-19 23:48:30 51

原创 继承

父类Person:package com.kuang.oop.demo4;/** * @ClassName Person * @Description 什么是继承 * @Author 麻虾 * @Date 2021/4/18 22:42 42 * @Version 1.0 */// Person 人public class Person { // public // protected // default // private 一般属性设为私有

2021-04-19 23:47:05 70

原创 封装

封装,记住这句话就够了:属性私有, get/setpackage com.kuang.oop.demo3;/** * @ClassName Student2 * @Description 封装详解,记住这句话就够了:属性私有,get/set * @Author 麻虾 * @Date 2021/4/18 21:47 47 * @Version 1.0 *//*封装的意义: 1.提高程序的安全性,保护数据 2.隐藏代码的实现细节 3.统一接口 4.提高系

2021-04-19 23:21:56 75

原创 构造器

package com.kuang.oop.demo2;/** * @ClassName Person1 * @Description 构造器详解 * @Author 麻虾 * @Date 2021/4/18 20:39 39 * @Version 1.0 */public class Person { String name; int age; //显示定义一个无参构造 public Person(){} public Person(Str

2021-04-19 23:18:16 47

原创 类与对象的创建

package com.kuang.oop.demo1;/** * @ClassName Student1 * @Description 类与对象的创建 * @Author 吴旭 * @Date 2021/4/13 16:32 32 * @Version 1.0 */public class Student { //属性:字段 String name; int age; //方法 public void study(){ Syst

2021-04-19 23:11:08 52

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除