自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 资源 (4)
  • 收藏
  • 关注

原创 元注解

元注解的作用就是负责注解其他注解,Java定义了四个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明。这些类型和它们所支持的类在Java.lang.annotation包中可以找到.(@Target,@Retention,@Documented,@lnherited)@Target:用于描述注解的使用规范(即:被描述的注解可以用在什么地方)@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE(源码)&..

2020-12-31 22:25:39 157 2

原创 内置注解

内置注解:@override:定义在Java.long。Override中,此注解只使用与修饰方法,表示一个方法声明打算重写超类中的另一个方法声明。@Deprecated:定义在Java.lang.Deprecated中,此注解可以用于修饰方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。@SuppressWarnings:定义在Java.lang.SuppressWarnings中,用来抑制编译时的警告信息,与前面两个注解有所不同,你需要添加一个参数才

2020-12-31 17:01:12 251

原创 初始注解

什么是注解Annotation是从JDK1.5开始引入的新技术Annotation的作用:不是程序本身,可以对程序作出解释,(这一点和注释(conmment)没什么区别)可以被其他程序(比如:编译器等)读取Annotation的格式:注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value=“unchecked”)Annotation在哪里使用?可以附加在 package class method field 等上

2020-12-31 16:41:45 209

原创 线程的三种创建方式

回顾线程的创建方式:package Thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;//总结线程的创建public class ThreadNew { public static void main(String[] args) { new MyThread

2020-12-25 11:27:53 141

原创 线程池

线程池的使用背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。好处:提高影响速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中线程,不需要每次都创建)便于线程管理(…)corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间会终止。

2020-12-25 11:22:34 143

原创 生产者消费模式-信号灯法

并发协作模型”生产者/消费者模式“—>信号灯法案例package Thread;//测试:生产者消费者模型--->标志位 信号灯法public class TestPc2 { public static void main(String[] args) { TV tv=new TV(); new player(tv).start(); new Watcher(tv).start(); }}//生产者--&g

2020-12-25 09:54:25 161

原创 生产者消费模型-管程法

并发协作模型“生产者/消费者模式”—>管程法生产者:负责生产数据的模块(可能是方法,对象,线程,进程);消费者:负责处理数据的模块(可能是方法,对象,线程,进程);缓冲区:消费者不能直接使用生产者的数据,他们之间有个“缓冲区”生产者将生产好的数据放入缓冲区,消费者从缓冲区拿出数据管程法 案例package Thread;import java.awt.*;//测试:生产者消费者模型--->利用缓冲区:管理法public class TestPc {

2020-12-25 08:35:48 166

原创 生产者消费问题

生产者消费问题应用场景:生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再放入产品为止。线程通信-分析这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件。对于生产者,没有生产产品之前,要通知消费者等待。而

2020-12-24 20:24:19 204 2

原创 Lock锁

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

2020-12-24 19:47:40 170 2

原创 死锁案例

死锁多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形,某一个同步块同时拥有 "两个以上对象的锁"时,就可能会发生 “死锁” 的问题。死锁避免方法产生死锁的四个必要条件:互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

2020-12-24 17:36:36 642 6

原创 CopyOnWriteArrayList

package Thread;import java.util.concurrent.CopyOnWriteArrayList;//测试JUC安全类型的集合public class TestJUC { public static void main(String[] args) { CopyOnWriteArrayList<String> list=new CopyOnWriteArrayList<String>(); for (in

2020-12-24 16:53:43 126 2

原创 同步方法以及同步块

同步方法由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized方法和synchronized块同步方法:public synchronized void methood(int args){}synchronized方法控制对"对象"的访问,每个对象对应一把锁,每个synchronized方法都必须获得调用方法的对象的锁才能执行,否则线程会阻塞,方法一旦执行,就

2020-12-24 16:03:31 2701 14

原创 多线程案例

三个加synchronized 之后安全的案例案例1: 添加了一个同步块 synchronized(obj){}package Thread;import java.util.ArrayList;import java.util.List;//线程不安全的集合 public class UnsafeList { public static void main(String[] args) { List<String> list=new ArrayLis

2020-12-24 16:00:49 128 2

原创 三个 线程不安全的案例

三个 线程不安全的案例案例1 :package Thread;import java.util.ArrayList;import java.util.List;//线程不安全的集合public class UnsafeList { public static void main(String[] args) { List<String> list=new ArrayList<String>(); for (int i = 0;

2020-12-24 15:02:03 244 2

原创 线程同步

线程同步(重点)线程同步:现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题,比如:食堂排队打饭,每个人都想吃饭,最天然的解决办法就是,排队,一个个来。处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时候我们就需要线程同步,线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池下形成队列,等待前面线程使用完毕,下一个线程在使用。由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突的问题,为了保证数据在方法中被访问时的

2020-12-24 08:15:56 1182 6

原创 守护线程

守护(daemon)线程线程分为用户线程和守护线程虚拟机必须确保线程执行完毕虚拟机不用等待守护线程执行完毕如,后台记录操作日志,监控日志,垃圾回收等待…案例:package Thread;//守护线程public class TestDaemon { public static void main(String[] args) { God g=new God(); You1 y=new You1(); Thread threa

2020-12-23 20:50:37 149

原创 线程优先级

线程优先级:Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定调度哪个线程来执行。线程优先级用数字表示,范围1~10Thread.MIN_PRIORITY=1;Thread.Max_PRIORITY=10;Thread.NORM_PRIORITY=5;使用以下方式改变获取优先级getPriority().setPriority(int xxx)优先级的设定建议在start()调度之前案例package Thread;//测试线

2020-12-23 20:24:05 120

原创 观察线程状态

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

2020-12-23 17:52:34 186

原创 线程强制执行-Join

线程强制执行-JoinJoin合并线程,待此线程执行完后,再执行其他线程,其他线程阻塞可以想象成插队。案例package Thread;//测试Join方法//想象为插队public class TestJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("我是VI

2020-12-23 15:49:23 176

原创 线程礼让-yield

线程礼让礼让线程,让当前正在执行的线程暂停,但不阻塞将线程从运行状态转为就绪状态让cpu重写调度,礼让不一定成功,看CPU心情案例package Thread;//测试礼让线程//礼让不一定成功,看cpu心情public class TestYield { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield,"

2020-12-23 15:36:13 174

原创 线程休眠-Sleep

线程休眠Sleep(时间)指定当前线程阻塞的毫秒数;Sleep存在异常 InterruptedException;Sleep时间达到后线程静茹就绪状态;Sleep可以模拟网络延迟,倒计时等。每一个对象都有一个锁,Sleep不会释放锁案例package Thread;import java.sql.SQLOutput;import java.text.SimpleDateFormat;import java.util.Date;public class TestSleep {

2020-12-23 14:51:12 179

原创 多线程的状态

线程状态!在这里插入图片描述方法说明setPriority(int new priority)更改线程的优先级static void sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠void join()等待该线程终止static void yield()暂停当前正在执行的线程对象,并执行其他线程void interrupt()中断线程,别用这个方式boolean isAlive()测试线程是否处于活动状态

2020-12-23 11:47:15 121

原创 Lambda 表达式

初识Lambda表达式:希腊字母表中排序第十一位的字母,英语名称为 Lambda避免匿名内部类定义过多其实质属于函数式编程的概念为什么要使用lambda表达式:避免匿名内部类定义过多可以让你的代码看起来更加简捷去掉了一堆没有意义的代码,只留下核心的逻辑也许你会说,我看了Lamdba表达式,不但不觉得简洁,反而觉得更乱了,看不懂了,那是因为我们还没有习惯,用的多了,看的习惯了,就好了理解Functional interface(函数式接口)是学习Java8 lambda表达式的关

2020-12-23 08:10:00 583 12

原创 静态代理

静态代理:要求:你: 真实角色婚庆公司: 代理你,帮你处理结婚的事结婚:都实现结婚接口即可案例:package Thread;/** 静态代理模式总结:* 真实对象和代理对象都要实现同一个接口* 代理对象要代理真实角色* *//** 好处:* 代理对象可以做很多真实对象做不了的东西* 真实对象专注做自己的东西* */public class StacticProxy { public static void main(String[] args) {/

2020-12-22 21:48:35 129 2

原创 多线程的实现方法 【三】

实现三 实现 Callable接口实现Callable接口 ,需要返回值类型重写 call方法,需要抛出异常创建目标对象创建执行服务: ExecutorService ser=Executors.newFixedThreadPool(1);提交执行: Future result1=ser.submit(t1);获取结果: boolean r1=result1.get()关闭服务:ser.shutdownNow();案例:package Thread;import java.util

2020-12-22 18:16:34 145 6

原创 Java多线程案例-龟兔赛跑

案例: 龟兔赛跑首先来个赛道距离,然后要离终点越来越近判断比赛是否结束打印胜利者龟兔赛跑开始故事中都是乌龟赢的,兔子需要睡觉,所以我们来模拟兔子睡觉终于,乌龟赢得比赛package Thread;//模拟龟兔赛跑public class TestThread2 implements Runnable { //胜利者 private static String winner; @Override public void run() {

2020-12-22 17:27:42 432 4

原创 Java中多线程的案例

案例:实现多线程同步下载图片完成这个案例之前可以必须下载一个包 就是 commons-io-2.8.0.jar 如果就出现不了效果在本个项目下创建一个 lib文件夹 复制进去 就可以了如果想要这个包 可以私信博主package Thread;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.URL;//练习Thread

2020-12-22 08:24:48 554 2

原创 Java初识多线程

线程实现(重点)Thread(线程不一定立即执行,CPU安排调度)自定义线程类继承Thread类重写 run()类,编写线程执行体创建线程对象,调用start()方法启动线程案例1: 多线程的执行顺序package Thread;//创建线程方式一:继承Thread类,重写run()方法, 调用start开启线程//总结:注意 线程开启不一定立即执行 ,由CPU调度执行public class TestThread extends Thread { public v

2020-12-21 20:49:53 233

原创 Java中的多线程

线程介绍线程就是独立的执行路径在程序运行时,即使没有自己创建线程,后台也会有多个线程,如多线程,gc线程main()称为主线程,为系统入口,用于执行整个程序;在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调用,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的。对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;线程会带来额外的开销,如cpu调度时间,并发控制开销。每个线程在自己的工作内存交互,内存控制不当会造成数据不一致。...

2020-12-21 19:33:55 110

原创 正则表达式【十】

RegExp的静态属性RegExp支持一些静态属性。在使用正则表达式对象对字符串执行搜索的过程中,一旦匹配成功,这些静态属性的值将自动更新,以反映匹配的结果。RegExp的静态属性静态属性描述index是当前表达式模式首次匹配内容的开始位置,从0开始计数。其初始值为-1 。每次成功匹配时,其属性值都会随之改变。input返回当前所作用的字符串,初始值为空字符串“”lastMatch是当前表达式模式的最后一个匹配字符串,其初始值为空字符串“”。每次成功匹配时,其属性

2020-12-21 17:22:16 138

原创 正则表达式 【九】

RegExp对象方法​ RegExp对象的常用方法除了test() 之外还有exec()方法,RegExp对象的方法。方法描述test()语法为test(str) 该方法检查一个字符串是否存在创建RegExp对象实例时所指定的表达式模式,如果存在就返回True,否则返回False 。如果找到匹配项,则会更行RegExp对象中的有关静态属性,以反应匹配情况。exec()语法格式为exec(str)该方法使用创建RegExp实例时所指定的表达式模式对一个字符串进行搜索,

2020-12-21 17:05:42 267

原创 正则表达式 【八】

注意:由于JavaScript字符之中的 “\” 是一个转义字符,因此,使用显式构造函数创建RegExp实例对象时,应将原始正则表达式中 “/” 用 "//"替换。在下面代码中的两条语句是等价的var rel=new RegExp("\ \d{5}");var rel2=/\d{5}/;由于正则表达式模式文件中的转义字符也是 ”/“ ,如果正则表达式中要匹配愿义字符 ”\“ ,在正则表达式模式文本中要以”//“来表示,当使用显式构造的方式创建RegExp实例对象的时候,就需要使用 “/////”

2020-12-21 09:43:32 148 6

原创 正则表达式 【七】

创建RegExp对象​ 在JavaScript中,正则表达式由一个RegExp对象表示,利用RegExp对象来完成有关正则表达式的操作和功能。​ 每一条正则表达式模式对应一个RegExp对象,由两种方式可以创建RegExp对象的实例,下面分别对应这两种方式进行说明使用RegExp的显示构造函数new ReExp("pattern"[,"flags"]);使用RegExp的隐式构造函数,采用纯文本格式/pattern/[flags]pattern部分为要使用的正则表达式模

2020-12-21 09:17:20 157 2

原创 正则表达式【六】

1.影响表达式内部的子表达式之间关系的符号表达式内部可能包含多个子表达式,一些符号可以影响子表达式之间的关系子表达式表达式作用|左右两边表达式之间 "或"关系,匹配做左边或者右边()在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰;取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到举例1:表达式"Tom|Jack"在匹配字符串"I’m Tom,he is Jack"时,匹配结果是:成功;匹配到的内容是:“Tom”;匹 配到的位置是:开始于4

2020-12-18 16:16:29 113 2

原创 正则表达式 【五】

其他一些代表抽象意义的特殊符号一些符号在表达式中代表凑下的特殊意义匹配边界表达式作用^与字符串开始的地方匹配,不匹配任何字符$与字符串结束的地方匹配,不匹配任何字符\b匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符举例1:表达式 ^aaaa 在匹配 xxx aaa xxx 时,匹配结果是 失败。因为 “^” 要求与字符串开始的地方匹配,因此,只有当“aaa”位于字符串的开头的时候 ”^aaa" 才能匹配 比如 “aaa bbb ..

2020-12-18 15:25:42 2801 4

原创 正则表达式 【四】

修饰符匹配次数的特殊符号前面讲到的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符其中任意一个的表达式,都只能匹配一次。如果使用表达式在加上匹配次数的特殊符号,那么不用重复书写表达式可以重复匹配。使用方法是:“次数修饰”放在 "被修饰符的表达式"后边。比如: “[bcd] [dbc]” 可以写成 “[bcd]{2}”匹配次数表达式作用{n}表达式重复n次,比如:"\w{2}"相当于 “\w\w” :”a{5}“ 相当于 “aaaaa”{m,n}表达式至..

2020-12-18 11:49:08 134

原创 正则表达式【三】

能够于’多种字符’匹配的表达式正则表达式中的一些表达方法,可以匹配 '多个字符’其中的任意一个字符,比如,表达式 "\d"可以匹配任意一个数字。虽然可以匹配其中任意字符,但是只能是一个,不是多个,这就好比扑克牌时候,大熊澳网可以代替任意一张牌,但是只能代替一张牌。匹配多种字符(1)表达式可匹配\d任意一个数字,0-9中的任意一个\w任意一个字母或数字或下划线,也就是A-Z a-z 0-9 _中任意一个\s包括括号,制表符,换页符等空白符的其中任意一个..

2020-12-18 10:32:38 154

原创 正则表达式【二】

简单转义字符一些不发方便书写的字符,采用在前面加 “/ ”的方法转义字符(1)表达式可匹配\r \n代表回车和换行符\t代表制表符\代表 “ \ ”本身还有其他一些有特殊用处的标点符号,在前面加 ’ \ ‘,后,就代表该符号本身。比如:^ $ 都有特殊意义,如果要想匹配字符串中的 ^ 和 $ 字符,则表达式就需要写成 ^ 和 $转义字符(2)表达式可匹配^匹配^本身\ $匹配$本身\ ..

2020-12-18 09:51:03 101

原创 正则表达式【一】

RegExp对象正则表达式正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如表达式“ab+”描述的特征是“一个a和任意个’b’ “,那么‘ ab ’ ,’ abb ’ , ’ abbbbbbbbb ’ 都符合这个特征。有时也把正则表达式表示的特征称为 ” 匹配模式 “。正则表达式可以用来:验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定

2020-12-18 08:41:34 170

原创 Java中的Properties属性集合

补充 PripertiesProperties:属性集合特点:存储属性名和属性值属性名和属性值都是字符串类型没有泛型和流有关案例package IO;import java.io.*;import java.time.format.FormatStyle;import java.util.Properties;import java.util.Set;/**Properties集合的使用* */public class TestProperties {

2020-12-17 21:42:48 154 2

DeskTopShare---桌面共享

多人远程桌面共享软件,虚拟投影仪。可以在局域网内远程显示对方机器的桌面(暂不支持远程控制)。服务端可查看连接用户列表,用户姓名。适用于各类办公室会议,文档评审,Office文档讲演,电脑端同步演示,电脑培训演示。

2020-11-23

Ditto----复制神器

开启 Ditto 后,不会有任何程序界面出现,它只是默默地在系统右下角弹出了一个蓝色的托盘图标,这时候你复制任何内容到剪贴板都会被 Ditto 一一记录。如果你什么时候想找到它,就可以按 Ctrl+`,当中的每条内容都可以供你选择性的重新复制。

2020-11-23

Vieas----轻量看图神器

使用查看窗口和编辑窗口来工作是高效的; 图像实时预览有助于编辑和保存; 支持的文件格式是BMP、PNG、JPEG、TIFF(未压缩)和GIF; (Susie 插件可用于加载其他文件。) 实现了JPEG无损转换; 可直接打开zip压缩包查看图片 其他功能是全屏,幻灯片,打印,裁剪,调整大小,旋转,修正等。

2020-11-23

Listary——资源管理器

Listary 是一款实用的搜索工具 。它能给“我的电脑”(资源管理器)加上许多智能命令,含有收藏文件夹,快速打开最近浏览的文件夹,快速显示/隐藏文件扩展名等等实用功能。能给你日常的收藏和整理文件提高效率。

2020-11-22

空空如也

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

TA关注的人

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