- 博客(140)
- 收藏
- 关注
原创 HTML知识点
名字: <input type="text" name="username" value="班班" maxlength="8" size="30">
2025-11-22 11:42:48
792
原创 JMM小知识
JMM对这八种操作规则和对volatile的一些特殊规则就能确定哪里操作是线程安全,哪些操作是线程不安全的了。JMM定义了线程工作内存和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory)■一个新的变量必须在主内存中诞生,不允许工作内存直接使用一个未被初始化的变量。■如果对一个变量进行lock操作,会清空所有工作内存中此变量的值,在执行引擎使用这个变量前,必须重新load或assign操作初始化变量的值。
2025-11-14 22:04:04
253
原创 JVM入门知识点
存在于不同域中的类文件就具有了当前域的全部权限,如下图所示的安全模型(jdk 1.6)每个线程都有一个程序计数器,是线程私有的,就是一个指针, 指向方法区中的方法字节码(用来存储指向像一条指令的地址, 也即将要执行的指令代码),在执行引擎读取下一 条指令, 是一个非常小的内存空间,几乎可以忽略不计。虚拟机为不同的类加载器载入的类提供不同的命名空间,命名空间由一系列唯一的名称组成, 每一个被装载的类将有一个名字, 这个命名空间是由Java虚拟机为每一个类装载器维护的,它们互相之间甚至不可见。
2025-11-14 21:27:14
1019
原创 获取泛型信息及获取注解信息
➢为了通过反射操作这些类型, Java新增了ParameterizedType , GenericArrayType ,TypeVariable和WildcardType几种类型来代表不能被归一到Class类中的类型但是又和原始类型齐名的类型.➢Java采用泛型擦除的机制来引入泛型, Java中的泛型仅仅是给编译器javac使用的,确保数据的安全性和免去强制类型转换问题, 但是,一旦编译完成,所有和泛型有关的类型全部擦除。//获得泛型的参数类型。//获得注解的value的值。//获得类指定的注解。
2025-11-06 22:23:52
577
原创 获得类运行时的结构、动态创建对象执行方法和性能对比分析
➢若原方法声明为private,则需要在调用此invoke()方法前,显式调用方法对象的setAccessible(true)方法,将可访问private的方法。System.out.println("反射方式调用执行一千次:"+(endtTime-startTime) +"ms");System.out.println("关闭检测执行一千次:"+(endtTime-startTime) +"ms");//获得本类的所有方法。
2025-11-06 21:27:19
779
原创 类加载内存分析、类的初始化分析和类加载器
类构造器<clinit> ()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。(类构造器是构造类信息的,不是构造该类对象的构造器)。➢加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象.➢当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。➢当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类。
2025-11-04 23:21:30
1003
原创 得到Class类的方法及所有类型的Class对象
一个Class对象包含了特定某个结构(class/interface/enum/annotation/primitive type/void/[])的有关信息。c)已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出 ClassNotFoundException。➢Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得相应的Class对象。➢class: 外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类。
2025-11-04 22:29:50
945
原创 反射概述and获得反射对象
➢加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。这个对象就像一面镜子, 透过这个镜子看到类的结构,所以,我们形象的称之为:反射。➢是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。➢以上的方法返回值的类型是-个Class类,此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。如Java、C、C++。
2025-11-03 22:40:51
254
原创 注解(内置注解、元注解、自定义注解)
➢@Deprecated :定义在ava.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择.◆这些类型和它们所支持的类在ja.lang annotation包中可以找到.( @Target,@Retention,@Documented,@Inherited )➢注解是以"@注释名"在代码中存在的,还可以添加一些参数值, 例如:@SuppressWarnings(value="unchecked").
2025-11-02 22:21:29
285
原创 使用线程池
◆思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。◆<T> Future<T> submit(Callable<T> task): 执行任务,有返回值,一般又来执行Callable。◆ExecutorService: 真正的线程池接口。◆Executors: 工具类、线程池的工厂类,用于创建并返回不同类型的线程池。◆背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影。2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)//参数为线程池大小。
2025-11-01 21:21:49
276
原创 线程协作——生产者消费者问题:
System.out.println("消费者了-->" + container.pop().id + "只鸡");◆如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止.◆如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止.◆对于生产者,没有生产产品之前,要通知消费者等待. 而生产了产品之后,又需要马上通知消费者消费。◆假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库, 消费者将仓库中产品取走消费。
2025-11-01 21:02:05
550
原创 死锁及Lock锁
◆多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形. 某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。System.out.println(this.girNmae+"获得镜子的锁");System.out.println(this.girNmae+"获得镜子的锁");System.out.println(this.girNmae+"获得镜子的锁");并且具有更好的扩展性(提供更多的子类)
2025-10-31 22:00:08
431
原创 线程同步机制及三大不安全案例
System.out.println(Thread.currentThread().getName()+ "买到了"+ticketNums--+"张票");System.out.println(Thread.currentThread().getName()+ "买到了"+ticketNums--+"张票");System.out.println(Thread.currentThread().getName()+"钱不够");new Thread(buyTicket,"本人").start();
2025-10-31 21:03:10
580
原创 守护线程。
/默认是false表示是用户线程,正常的线程都是用户线程。System.out.println("你幸福的过完一生");//你 用户线程启动。System.out.println("妈妈守护着你");//母亲 守护线程启动。◆如,后台记录操作日志,监控内存,垃圾回收等待..◆虚拟机必须确保用户线程执行完毕。◆虚拟机不用等待守护线程执行完毕。◆线程分为用户线程和守护线程。
2025-10-31 19:59:53
281
原创 线程的优先级
◆Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。2.优先级低只是意味着获得调度的概率低,并不是优先级低就不会被调用了,这都是看CPU的调度。1.优先级的设定要在start()前面。◆线程的优先级用数字表示,范围从1~10.//先设置优先级再启动。//主线程默认优先级。◆使用以下方式改变或获取优先级。
2025-10-26 22:19:25
286
原创 线程停止、休眠、礼让、强制执行、观测线程状态
System.out.println(Thread.currentThread().getName()+ "线程开始");System.out.println(Thread.currentThread().getName()+ "线程结束");System.out.println("线程VIP来了" + i);System.out.println("线程停止了");Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞。//1.建议线程正常停止--》利用次数,不建议死循环。
2025-10-26 21:47:40
864
原创 Lamda表达式
1.lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。2.对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。1.任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。//匿名内部类:没有类的名称,必须借助接口或者父类。/* //1.lambda简化。//3.简化3:简化花括号。//6.lambda简化。//1.简化1:参数类型。//2.简化2:简化括号。1.避免匿名内部类定义过多。//1.定义一个函数式接口。
2025-10-26 20:23:30
929
原创 静态代理模式
new Thread(()-> System.out.println("想你了")).start();System.out.println("婚礼之前,布置现场");System.out.println("婚礼结束,收尾款");System.out.println("结婚进程开始");1.真实对象和代理对象都要实现同一个接口。//代理对象,帮助结婚(婚庆公司)2.代理对象要代理真实对象。
2025-10-26 19:30:43
159
原创 实现Callable接口(了解即可)
4.创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1);System.out.println("IO异常,downloader方法出现问题");5.提交执行:Future<Boolean> result1= ser.submit(t1);System.out.println("下载了文件名为:" + name);7.关闭服务:ser.shutdownNow();//线程创建方法三:实现Callable接口。//下载图片线程的执行体。
2025-10-26 17:31:52
357
原创 实现Runnable接口
System.out.println(Thread.currentThread().getName()+"-->拿到了第" +ticketNums-- +"张票");System.out.println(Thread.currentThread().getName()+"跑了" + i +"步");if (Thread.currentThread().getName().equals("兔子")){new Thread(ticket,"黄牛党").start();//mian线程,主线程。
2025-10-26 17:14:20
355
原创 继承Thread类
System.out.println("IO异常,downloader方法出现问题");System.out.println("我在学习多线程---" + i);System.out.println("我在敲代码---"+ i);System.out.println("下载了文件名为:" + name);//创建线程方法一:继承Thread类,重写run()方法,调用start开启线程。//mian线程,主线程。//run方法线程体。//创建一个线程对象。//下载图片线程的执行体。
2025-10-25 22:30:25
393
原创 线程、进程、多线程
注意:很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错局。4.在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为的干预的。是系统资源分配的单位。2.在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程;1.程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
2025-10-25 21:25:38
212
原创 UDP多线程在线咨询
new Thread((new TalkReceive(8888,"老师"))).start();new Thread(new TalkReceive(9999,"学生")).start();
2025-10-25 20:16:01
372
原创 UDP消息发送
String msg = "你好呀,服务器";//1.建立一个Socket。发短信:不用连接,需要知道对方地址。//还是要等待客户端的连接!//不需要连接服务器。
2025-10-24 21:29:47
279
原创 TCP文件上传实现
/阻塞式监听,会一直等待客户端连接。os.write("我接受完毕了,你可以断开了".getBytes());//确定服务器接受完毕才可以断开连接。//1.创建一个 Socket连接。//通知服务器,我已经结束了。//2.监听客户端的连接。//2.创建一个输出流。//通知客户端接受完毕。
2025-10-23 21:58:42
548
原创 TCP实现聊天
os.write("你好,欢迎学习Java哟".getBytes());//2.创建一个 socket连接。//1.要知道服务器的地址和端口。//3.发送消息 IO流。//3.读取客户端的消息。1.建立服务的端口 ServerSocket。//2.等待客户端连接。2.等待用户的连接 accept。1.连接服务器 Socket。
2025-10-23 20:21:49
313
原创 网络编程-通信协议
网络通信协议:速率,传输码率,代码结构,传输控制...TCP/IP协议簇:实际上是一组协议。●不管有没有准备好,都可以发给你..●客户端、服务端:没有明确的界限。●传输完成,释放连接,效率低。●TCP: 用户传输协议。●UDP:用户数据报协议。●TCP:用户传输协议。●IP:网络互连协议。
2025-10-21 22:25:11
401
原创 集合-综合代码练习
Collections.addAll(boyList,"张衡","范闲","千玺","成龙","张小天","杜甫","李白","宋永彰","宋元");Collections.addAll(list1,"海露","美意","芙蓉","清清","亦菲","莹莹","秣陵","圣鹤");Collections.addAll(list,"海露","美意","芙蓉","清清","亦菲","莹莹","秣陵","圣鹤");自动点名器2:班级里有N个学生,要求70%的概率随机到男生,30%的概率到女生。
2025-09-16 22:02:06
687
原创 Collections
●作用: Collections不是集合,而是集合的工具类。●java.util.Collections:是集合工具类。Collections常用的API。
2025-09-16 15:28:26
308
原创 可变参数。
o可变参数必须放在形参列表的最后面。3.格式:数据类型...参数名称。举例: int...a。1.可变参数本身上就是一个数组。2.作用:在形参中接收多个数据。o形参列表中可变参数只能有一个。
2025-09-16 14:51:56
185
原创 Map总结
2.HashMap是哈希表结构的,JDK8开始由数组, 链表,红黑树组成的。如果是最环情况,添加了8个元素,这8个元素形成了链表,此时TreeMap的效率要更高。传递一个思想:代码中的逻辑都有两面性,如果我们只知道了其中的A面,而且代码中还发现了有变量可以控制两面,那么该逻辑一定会有B面。4.你觉得在Map集合中,java会提供- -个如果键重复了,不会覆盖的put方法呢?HshMap的底层,默认是利用哈希值的大小关系来创建红黑树的。int类型的变量控制,一般至少有三面,因为int可以取多个值。
2025-09-16 14:35:34
156
原创 TreeMap
要求:按照学生年龄的升序排列,年龄一样按照姓名的字母排列, 同姓名年龄视为同一个人。//String 按照字母在ASCII码表中对应的数字升序进行排序。//Integer Double 默认情况下是按照升序排序的。注意:默认按照键的从小到大进行排序,也可以自己规定键的排序规则。//o2:已经在红黑树中的元素。//o1:表示要添加的元素。//存在,表示当前元素又出现一次。//不存在,表示是第一次出现。//this:表示当前要添加的元素。//遍历集合,并按照指定的方式拼接。th.put(6,"洗衣液");
2025-09-16 14:27:18
423
原创 LinkedHashMap
●原理:底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。●这里的有序指的是保证存储和取出的元素顺序一致。●由键决定:有序、不重复、无索引。
2025-09-12 13:59:44
120
原创 HashMap
/ int nextInt(int bound):生成[0,bound]范围内的非负数。(依赖hashCode方法和equals方法保证健的唯一,如果健存储的是自定义对象,需要重写这两 个方法,如果值是自定义对象,不需要重写)某个班级80名学生,现在需要组成秋游活动,班长提供了四个景点依次是(A、B、C、D) ,每个学生只能选择一个景点,请统计出最终哪个景点想去的人数最多。创建一个HashMap集合, 键是学生对象(Student),值是籍贯(String)。//一种生成随机数的类。
2025-09-09 17:47:59
322
原创 集合-双列集合(Map)
System.out.println(m.containsValue("小龙女"));//在添加元素的时候,如果建存在,那么会把原有的建值对对象覆盖,会把覆盖的值进行返回。System.out.println(m.containsValue("黄蓉"));System.out.println(m.containsKey("小龙女"));/* String value2 = m.put("韦小宝","双儿");String value1 = m.put("郭靖", "黄蓉");
2025-09-09 16:29:50
833
原创 TreeSet
要求:存入四个字符串,“C”, "ab", “df”, "qwer”按照长度排序,如果一样长则按照首字母排序。属性: (姓名,年龄,语文成绩,数学成绩英语成绩),按照总分从高到低输出到控制台?要求按照学生的年龄进行排序,同年龄按照姓名字母排列(暂不考虑中文)。//如果长度一样按照首字母排序。//如果长度一样按照首字母排序。如果都一样,认为是同一一个学生,不存。//负数:表示当前要添加的元素是小的,存左边。//正数:表示当前要添加的元素是大的,存右边。//0:表示当前要添加的元素已经存在,舍弃。
2025-09-09 14:45:24
310
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅