- 博客(62)
- 收藏
- 关注
原创 03-迭代器Iterator接口
迭代器Iterator接口集合元素的遍历操作,使用迭代器Iterator接口1.内部的方法:hasNext() 和 next()2.集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。3.内部定义了remove(),可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()使用迭代器Iterator接口遍历集合@Test public void test1(){ Collection coll =
2022-01-20 11:54:52
253
1
原创 02-Collection接口中的常用方法
Collection接口中的常用方法add(Object e)size()addAll(Collection coll1)clear()isEmpty()@Test public void test1(){ Collection coll = new ArrayList(); //add(Object e):将元素e添加到集合coll中 coll.add("AA"); coll.add("BB"); col
2022-01-20 11:54:16
268
原创 01-集合框架的概述
集合框架的概述/*一、集合框架的概述 * * 1.集合、数组都是对多个数据进行存储操作的结构,简称Java容器。 * 说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中) * * 2.1 数组在存储多个数据方面的特点: * > 一旦初始化以后,其长度就确定了。 * > 数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了。 * 比如:String[] arr;int[]
2022-01-09 21:08:28
226
原创 07-Java比较器
Java比较器一、说明:Java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 < 的但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。如何实现?使用两个接口中的任何一个:Comparable 或 Comparator二、Comparable接口与Comparator的使用的对比:Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小。Comparator接口
2022-01-09 21:00:57
126
原创 06-JDK 8中日期和时间的API
JDK 8中日期和时间的APILocalDate、LocalTime、LocalDateTime//今天是2021.12.27@Test public void testDate(){ //偏移量 Date date1 = new Date(2021 - 1900,12 - 1,27); System.out.println(date1);//Mon Dec 27 00:00:00 CST 2021 }/* LocalDat
2021-12-27 22:27:17
140
原创 05-JDK 8之前日期和时间的API测试
JDK 8之前日期和时间的API测试System类中的currentTimeMillis()@Test public void test1(){ long time = System.currentTimeMillis(); //返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。 //称为时间戳 System.out.println(time); }java.util.Date类与其子类java.sq
2021-12-27 22:25:08
137
原创 04-StringBuffer和StringBuilder的使用
StringBuffer和StringBuilder的使用String、StringBuffer、StringBuilder三者的异同? String:不可变的字符序列;底层使用char[]存储 StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储 StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储StringBuffer源码分析: String str = new St
2021-12-27 22:19:41
137
原创 03-String类与其他结构之间的转换
String类与其他结构之间的转换String 与 char[]之间的转换String --> char[]:调用String的toCharArray()char[] --> String:调用String的构造器@Test public void test1(){ String str1 = "abc123"; char[] charArray = str1.toCharArray(); for (int i = 0; i &l
2021-12-27 21:58:03
266
原创 02-String常用方法
String常用方法int length():返回字符串的长度: return value.lengthchar charAt(int index): 返回某索引处的字符return value[index]boolean isEmpty():判断是否是空字符串:return value.length == 0String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写String toUpperCase():使用默认语言环境,将 String 中的所有字符
2021-12-27 21:56:02
142
原创 01-String类的不可变性,不同的实例化方式,不同拼接操作
String类的不可变性,不同的实例化方式,不同拼接操作import org.junit.Test;public class StringTest { /* String:字符串,使用一对""引起来表示。 1.String声明为final的,不可被继承 2.String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小 3.String内部定义了final char
2021-12-27 21:55:31
137
原创 23-线程池
线程池import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//测试线程池public class TestPool { public static void main(String[] args) { //1.创建服务,创建线程池 //newFixedThreadPool参数为:线程池大小 ExecutorService ser
2021-12-20 17:38:28
237
原创 22-管程法与信号灯法
管程法与信号灯法管程法//测试:生产者消费者模型-->利用缓冲区解决:管程法//生产者,消费者,产品,缓冲区public class TestPC { public static void main(String[] args) { SynContainer container = new SynContainer(); new Producer(container).start(); new Consumer(container).
2021-12-20 17:36:57
179
原创 21-线程协作(生产者消费者问题)
线程协作(生产者消费者问题)Java提供了几个方法解决线程之间的通信问题方法名作用wait()表示线程一直等待,直到其他线程通知,与sleep不同,会释放锁wait(long timeout)指定等待的毫秒数notify()唤醒一个处于等待状态的线程notifyAll()唤醒同一个对象上所有调用wait()方法的线程,优先级别高的线程优先调度注意:均是Object类的方法,都只能在同步方法或者同步代码块中使用,否则会抛出异常IllegalMonito
2021-12-20 17:36:25
334
原创 20-Lock锁
Lock锁◆从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当◆java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象◆ReentrantLock 类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是Reentra
2021-12-20 17:34:02
160
原创 19-死锁
死锁多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形.某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题.产生死锁的四个必要条件:1.互斥条件: 一个资源每次只能被一个进程使用。2.请求与保持条件: 一个进程因请求资源而阻塞时,对已获得的资源保持不放。3.不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。4.循环等待条件 :若干进程之间形成一种头尾相接的循环等待资源关系。//死锁:多
2021-12-20 17:33:08
134
原创 18-同步方法和同步块
同步方法和同步块由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized方法和synchronized块.同步方法: public synchronized void method(int args) {}synchronized方法控制对“对象”的访问,每个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的锁才能执行,否则线程会阻塞,方法一旦执
2021-12-05 22:43:19
368
原创 17-线程同步
线程同步由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入锁机制 synchronized ,当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可。存在以下问题:◆一个线程持有锁会导致其他所有需要此锁的线程挂起;◆在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题;◆如果一个优先级高的线程等待一个优先级低的线程释放锁 会导致优先级倒置,引起性能问题.线程不安全案例1:买票
2021-12-04 21:59:01
563
原创 16-守护线程
守护(daemon)线程◆线程分为用户线程和守护线程◆虚拟机必须确保用户线程执行完毕◆虚拟机不用等待守护线程执行完毕◆如,后台记录操作日志,监控内存,垃圾回收等待. . .package state;// 上帝守护你public class TestDaemon { public static void main(String[] args) { God god = new God(); You you = new You(); Thr
2021-12-04 21:58:15
676
原创 15-线程的优先级
线程的优先级package state;//测试线程的优先级public class TestPriority { public static void main(String[] args) { //主线程默认优先级 System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority()); MyPriority myP
2021-12-04 21:57:47
122
原创 14-观测线程状态
观测线程状态线程状态。 线程可以处于以下状态之一:NEW尚未启动的线程处于此状态。RUNNABLE在Java虚拟机中执行的线程处于此状态。BLOCKED被阻塞等待监视器锁定的线程处于此状态。WAITING正在等待另一个线程执行特定动作的线程处于此状态。TIMED_WAITING正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。TERMINATED已退出的线程处于此状态。package state;public class TestState { publi
2021-12-04 21:56:38
170
原创 13-线程强制执行_join
线程强制执行 join◆join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞◆可以想象成插队package state;public class TestJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 500; i++) { System.out.println("线程VIP来了"+i); }
2021-12-04 21:52:07
496
原创 12-线程礼让_yield
线程礼让 yield礼让线程,让当前正在执行的线程暂停,但不阻塞将线程从运行状态转为就绪状态让cpu重新调度,礼让不一定成功!看CPU心情!package state;//测试礼让线程//礼让不一定成功public class TestYield { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield,"a").star
2021-12-04 21:51:02
236
原创 11-线程休眠_sleep
线程休眠 sleeppackage state;import java.text.SimpleDateFormat;import java.util.Date;public class TestSleep { public static void main(String[] args) { //持续打印系统当前时间 Date startTime = new Date(System.currentTimeMillis());//获取系统当前时间
2021-12-04 21:50:26
125
原创 10-线程停止
线程停止不推荐使用JDK提供的stop()、destroy()方法。[已废弃]推荐线程自己停止下来。建议使用一个标志位进行终止变量,当flag=false,则终止线程运行。package state;//测试stop//1.建议线程正常停止--->利用次数,不建议死循环。//2.建议使用标志位--->设置一个标志位//3.不要使用stop或者destroy等过时或者JDK不建议使用的方法public class TestStop implements Runnable{
2021-12-02 01:07:05
125
原创 09-Lambda表达式
Lambda表达式◆避免匿名内部类定义过多◆可以让你的代码看起来很简洁◆去掉了一堆没有意义的代码,只留下核心的逻辑。例1 Lambda表达式推导package Lambda;//Lambda表达式推导public class TestLambda1 { //3.静态内部类 static class Like2 implements ILike{ @Override public void lambda() { Syst
2021-12-02 01:05:53
212
原创 08-静态代理模式
静态代理模式//静态代理模式总结: //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色//好处: //代理对象可以做很多真实对象做不了的事情 //真实对象专注做自己的事情public class StaticProxy { public static void main(String[] args) { WeddingCompany weddingCompany = new WeddingCompany(new Me());
2021-12-02 01:05:34
217
原创 07-实现Callable接口(了解即可)
创建线程方式三(了解即可)实现Callable接口1.实现Callable接口,需要返回值类型2.重写call方法, 需要抛出异常3.创建目标对象4.创建执行服务: ExecutorService ser =Executors.newFixedThreadPool(1);5.提交执行: Future result1 = ser.submit(t1);6.获取结果: boolean r1 = result1.get()7.关闭服务: ser.shutdownNow();package Dem
2021-12-02 01:00:29
148
原创 06-龟兔赛跑
龟兔赛跑package Demo01;//龟兔赛跑public class race implements Runnable{ private static String winner; @Override public void run() { for (int i = 1; i <= 100; i++) { //模拟兔子休息(每10步睡一觉) if(Thread.currentThread().get
2021-12-02 00:59:55
115
原创 05-初识并发问题(抢火车票)
抢火车票案例package Demo01;//多个线程同时操作一个对象//买火车票的例子//发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱。(可能出现多个人抢到同一张票)public class TestThread4 implements Runnable{ //票数 private int ticketNums = 10; @Override public void run() { while(true){
2021-12-02 00:59:34
192
原创 04-实现Runnable接口
创建线程方式二定义MyRunnable类实现Runnable接口实现run()方法,编写线程执行体创建线程对象,调用start()方法启动线程package Demo01;//创建线程方式2:实现Runnable接口,重写run方法,执行线程需要丢入Runnable接口实现类.调用start方法。public class TestThread3 implements Runnable{ @Override public void run() { //run方法
2021-12-02 00:24:54
181
原创 03-多线程下载网图
网图下载案例package Demo01;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.URL;//案例:实现多线程同步下载3张图片public class TestThread2 extends Thread{ private String url;//网络图片地址 private String name;//保存
2021-12-02 00:24:19
258
原创 02-继承Thread类
创建线程方式一◆自定义线程类继承Thread类◆重写run()方法,编写线程执行体◆创建线程对象,调用start()方法启动线程package Demo01;//创建线程方式一:继承Thread类,重写run()方法 ,调用start 开启线程//总结:注意,线程开启不定立即执行,由CPU调度执行public class TestThread1 extends Thread{ @Override public void run() { //run方法线程体
2021-12-02 00:23:50
356
原创 01-进程、线程、多线程
Process与Thread◆说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。◆而进程则是执行程序的一次执行过程,它是一个动态的概念。 是系统资源分配的单位◆通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的的单位。注意:很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的
2021-12-02 00:22:28
95
原创 Day29-自定义异常
自定义异常使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。在程序中使用自定义异常类,大体可分为以下几个步骤:1.创建自定义异常类。2.在方法中通过throw关键字抛出异常对象。3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。4.在出现异常方法的调用者中捕获并处理异常。pack
2021-11-26 01:27:03
117
原创 Day28-异常
异常抛出异常捕获异常异常处理五个关键字◆try、 catch、 finally、 throw、 throws快捷键:选中代码,Ctrl + Alt+ T,自动包裹IDEA中红色波浪线报错用Alt+Enter查看提示!捕获异常package exception;public class Test { public static void main(String[] args) { int a = 1; int b = 0; try{
2021-11-26 01:26:40
321
原创 Day27-内部类
内部类内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了。package OOP.Demo09;public class Outer { private int id=10; public void out(){ System.out.println("这是外部类的方法"); } public class Inner{ public void in(){
2021-11-26 01:25:15
113
原创 Day26-接口
接口作用:1.约束2.定义一些方法,让不同的人实现3.接口中的方法都是public abstract4.接口中的属性都是public static final5.接口不能被实例化,接口中没有构造方法6.implements可以实现多个接口7.必须要重写接口中的方法package OOP.Demo08;//interface 定义的关键字,接口都需要有实现类public interface UserService { void add(String name) ; vo
2021-11-26 01:24:42
95
原创 Day25-抽象类
抽象类package OOP.Demo07;//abstract 抽象类 单继承~//(接口可以多继承)public abstract class Action { //约束~有人帮我们实现~ //abstract,抽象方法,只有方法名字,没有方法的实现! public abstract void doSomething();}//1.不能new这个抽象类,只能靠子类去实现它;约束!//2.抽象类中可以写普通的方法~//3.抽象方法必须在抽象类中//抽象的抽象:约
2021-11-26 01:24:11
273
原创 Day24-static
staticpackage OOP.Demo06;public class Student { private static int age;//静态的变量 private double score;//非静态的变量 public void run(){}//非静态方法,不能直接调用,必须通过对象调用 public static void go(){}//静态方法,可以直接调用 public static void main(String[] args) {
2021-11-26 01:23:34
279
原创 Day23-多态,instanceof和类型转换
多态即同一方法可以根据发送对象的不同而采用多种不同的行为方式。一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多。多态存在的条件:有继承关系子类重写父类方法父类引用指向子类对象注意:多态是方法的多态,属性没有多态性。instanceof 和类型转换package OOP.Demo05;public class Application { public static void main(String[] args) { //0bject > Str
2021-11-26 01:23:03
341
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅