Java
是正正呀
把自律当成一种习惯,你会越来越优秀
展开
-
Java零基础学java之注解和反射--07类加载器
类加载器package com.li.reflection_;public class Test03 { public static void main(String[] args) throws ClassNotFoundException { //获取系统类的加载器 ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); System.out.println(sy原创 2021-07-05 15:18:52 · 72 阅读 · 0 评论 -
Java零基础学java之注解和反射--06Java内存分析
Java内存分析类的加载过程当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过如下三个步骤来对该类进行初始化类的加载过程与ClassLoader的理解加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象链接:将Java类的二进制代码合并到JVM的运行状态之中的过程验证:确保加载的类信息符合JVM的运行规范,没有安全方面的问题准备:正式为类变量(static)分配内存并设原创 2021-07-04 21:49:20 · 59 阅读 · 0 评论 -
Java零基础学java之注解和反射--05反射
Java ReflectionReflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。Class c = Class.forName("java.lang.String")加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),在这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜原创 2021-07-04 19:24:13 · 86 阅读 · 2 评论 -
Java零基础学java之注解和反射--04自定义注解
自定义注解使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口分析:@interface用来声明一个注解,格式:public @interface 注解名{定义内容}其中的每一个方法实际上时声明了一个配置参数返回值类型就是参数的类型(返回值只能是基本了类型,Class、String、enum)可以通过default来声明参数的默认值如果只有一个参数成员,一般参数名为value注解元素必须要有值,我们定义注解元素时,经常使用空字原创 2021-07-04 16:53:45 · 113 阅读 · 0 评论 -
Java零基础学java之注解和反射--03元注解
元注解元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型。他们被用来提供对其他annotation类型作说明这些类型和他们所支持的类在java.lang.annotation包中可以找到(@Target,@Retention,@Documented,@Inherited)@Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)@Retention:表述需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE&l原创 2021-07-04 16:27:33 · 90 阅读 · 0 评论 -
Java零基础学java之注解和反射--02内置注解
内置注解@Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性、类、表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择@supperssWarnings:定义在java.lang.SupperssWarnings,用来抑制编译时的警告信息与前两个注释有所不同,你需要添加一个参数才能正确使用,这些原创 2021-07-04 15:45:50 · 93 阅读 · 0 评论 -
Java零基础学java之注解和反射--01什么是注解?
什么是注解Annotation是从JDK5.0开始引入的新技术。Annotation的作用:不是程序本身,可以对程序作出解释。(这一点和注释(comment)没什么区别)不可以被其他程序(比如:编译器等)读取。Annotation的格式:注解是以"@注释名"在代码中存在的,还可以添加一些参数值,例如:@SupperessWarnings(value=“unchecked”).Annotation在哪里使用?可以附加在package、class、method、fiel原创 2021-07-04 15:23:24 · 62 阅读 · 0 评论 -
多线程和UDP--在线咨询聊天
在线咨询:两个人都可以是发送方,也都可以是接收方一个线程发送,一个线程接收,同时开启两个线程 在线聊天发送信息客户端:package com.li.chat;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetSocketAddress;//一个线程发原创 2021-07-04 11:31:51 · 121 阅读 · 0 评论 -
Java零基础学java之多线程--23使用线程池
使用线程池背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活的公共交通工具。好处:提高响应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池,不需要每次都创建)便于线程管理(…)corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间后会终止原创 2021-07-03 21:08:18 · 61 阅读 · 0 评论 -
Java零基础学java之多线程--22生产者消费者问题:信号灯法
package com.li;//测试:生产者消费者问题 --> 信号灯法//电视台(节目,广告)、观众、电视public class TestPC2 { public static void main(String[] args) { TV tv = new TV(); TVStation tvStation = new TVStation(tv); Audience audience = new Audience(tv);原创 2021-07-02 22:57:10 · 64 阅读 · 0 评论 -
Java零基础学java之多线程--21生产者消费者问题:管程法
package com.li;//测试:生产者消费者问题-->利用缓冲区解决:管程法//生产者、消费者、产品、缓冲区public class TestPC { public static void main(String[] args) { Buffer buffer = new Buffer(); Producers product = new Producers(buffer); Consumer consumer = new Con原创 2021-07-02 21:29:55 · 78 阅读 · 0 评论 -
Java零基础学java之多线程--20Lock锁
Lock(锁)从JDK5.0开始,Java提供了更强大的线程同步机制——通过显式的定义同步锁对象来实现同步。同步锁使用Lock对象充当java.util.concurrent.locks.Lock接口是控制多个线程共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是Reentrant原创 2021-07-02 09:12:11 · 96 阅读 · 0 评论 -
Java零基础学java之多线程--19死锁剖析和案例
死锁多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,二导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题死锁比秒方法产生死锁的四个必要条件:互斥条件:一个资源每次只能被一个进程使用请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系原创 2021-07-01 21:29:31 · 62 阅读 · 0 评论 -
Java零基础学java之多线程--18JUC并发
package com.li.thread_synchronized;import java.util.concurrent.CopyOnWriteArrayList;public class TestJUC { public static void main(String[] args) throws InterruptedException { CopyOnWriteArrayList list = new CopyOnWriteArrayList();原创 2021-07-01 21:27:21 · 62 阅读 · 0 评论 -
Java零基础学java之多线程--18同步方法同步块
同步方法由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提供一套机制,这套机制,就是synchronized关键字,它包括两种用法:synchronized 方法 和synchronized块同步方法:public synchronized void method(int args){}synchronized方法控制对“对象”的访问,每一个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的锁才能执行,否则线程会阻塞,方法一原创 2021-07-01 21:25:42 · 60 阅读 · 0 评论 -
Java零基础学java之多线程--17线程不安全案例03
package com.li.thread_synchronized;import java.util.ArrayList;import java.util.List;//线程不安全的集合public class UnsafeList { public static void main(String[] args) { List list = new ArrayList(); for (int i = 0; i < 100000; i++) {原创 2021-07-01 11:49:07 · 57 阅读 · 0 评论 -
Java零基础学java之多线程--16线程不安全案例02
package com.li.thread_synchronized;//不安全取钱public class UnsafeWithdrawMoney { public static void main(String[] args) { //账户 Account account = new Account("结婚基金",100); //取钱 WithdrawMoney me = new WithdrawMoney(account,5原创 2021-07-01 11:48:23 · 65 阅读 · 0 评论 -
Java零基础学java之多线程--15线程不安全案例01
package com.li.thread_synchronized;//不安全买票public class UnsafeBuyTicket { public static void main(String[] args) { BuyTicket buyTicket = new BuyTicket(); new Thread(buyTicket,"小军").start(); new Thread(buyTicket,"小华").start();原创 2021-07-01 11:47:36 · 51 阅读 · 0 评论 -
Java零基础学java之多线程--14线程同步
线程同步 多个线程操作同一个资源 形成条件:队列+锁 解决安全性并发并发:同一个对象被多个线程同时操作上万人同时抢火车票两个银行同时取钱处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象。这时我们就需要线程同步,线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用由于同一个进程的多个线程共享同一块存储空间,在带来方便的同时,也带来来访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问原创 2021-07-01 11:46:22 · 67 阅读 · 0 评论 -
Java零基础学java之多线程--13 守护(daemon)线程
守护(daemon)线程线程分为用户线程和守护线程虚拟机必须确保用户线程执行完毕虚拟机不用等待守护线程执行完毕如,后台记录操作日志,监控内存,垃圾回收等待…package com.li.thread_state;//测试守护线程//上帝守护你public class TestDaemonThread { public static void main(String[] args) { God god = new God(); You you =原创 2021-06-30 21:00:33 · 75 阅读 · 0 评论 -
Java零基础学java之多线程--12线程优先级
线程优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级觉得应该调度哪个线程来执行线程的优先级用数字表示,范围从1~10Thread.MIN_PRIORITY = 1;Thread.MAX_PRIORITY = 10;Thread.NORM_PRIORITY = 5;使用以下方式改变或获取优先级getPriority().setPriority(int xxx)优先级的设定建议在start()调度前优先级低只是意味着获得调度的概率低原创 2021-06-30 20:12:36 · 92 阅读 · 0 评论 -
Java零基础学java之多线程--11线程状态观测
线程状态观测Thread.State线程状态。线程可以处于以下状态之一:New尚未启动的线程处于此状态Runnable在Java虚拟机中执行的线程处于此状态Blocked被阻塞等待监视器锁定的线程处于此状态Waiting正在等待另一个线程执行特定动作的线程处于此状态Timed_Waiting正在等待另一个线程执行动作达到指定等待时间的线程处于此状态Terminated已退出的线程处于此状态package com.li.thread_state;/原创 2021-06-30 19:24:10 · 84 阅读 · 0 评论 -
Java零基础学java之多线程--10线程礼让&Join
线程礼让礼让线程,让当前正在执行的线程暂停,但不阻塞将线程从运行状态转为就绪状态让cpu重新调度,礼让不一定成功!CPU心情package com.li.thread_state;//线程礼让,礼让不一定成功,看CPU心情public class TestThreadYield { public static void main(String[] args) throws InterruptedException { MyYield myYield = new My原创 2021-06-30 15:53:05 · 92 阅读 · 0 评论 -
Java零基础学java之多线程--09线程休眠
线程休眠sleep(时间) 指定当前线程阻塞的毫秒数;sleep存在异常InterruptedException;sleep时间达到后线程进入就绪状态;sleep可以模拟网络延时,倒计时等。每一个对象都有一个锁,sleep不会释放锁;package com.li.thread_state;import java.text.SimpleDateFormat;import java.util.Date;//模拟倒计时public class TestThreadSleep {原创 2021-06-30 10:10:27 · 70 阅读 · 0 评论 -
Java零基础学java之多线程--08线程停止
//测试stop/** 1. 建议线程正常停止--->利用次数,不建议死循环* 2. 建议使用flag标志位* 3. 不要使用stop和destroy等过时或者JDK不建议使用的方法*///用flag标志位停止线程public class TestThreadStop implements Runnable{ private boolean flag = true; @Override public void run() { int i = 0;.原创 2021-06-29 22:39:29 · 77 阅读 · 0 评论 -
Java零基础学java之多线程--07静态代理和Thread的静态代理
//静态代理模拟婚庆公司代理自己帮自己处理结婚的事情/** 1. 真实对象和代理对象都要实现同一个接口* 2. 代理对象要代理真实角色* 好处:* 1. 代理对象可以做很多真实对象做不了的事情* 2. 真实对象专注于做自己的事情*/public class StaticProxy { public static void main(String[] args) { //把结婚的目标对象传入婚庆公司 WeddingCompany weddingC.原创 2021-06-29 21:51:50 · 68 阅读 · 0 评论 -
Java零基础学java之多线程--06Lambda表达式
Lambda表达式λ 希腊字母表中排序第十一的字母,英语名称为Lambda避免匿名内部类定义过多其实质属于函数式编程概念(params) -> expression[表达式] (params) -> statement[语句] (params) -> {statements}a -> System.out.println(“i like lambda” + a);new Thread(()->System.out.println(“多线程学习。。原创 2021-06-29 20:04:17 · 72 阅读 · 0 评论 -
Java零基础学java之多线程--05模拟龟兔赛跑
//模拟龟兔赛跑/** 1. 模拟一个赛道,让乌龟兔子跑向终点* 2. 判断比赛是否结束* 3. 比赛结束打赢胜利者* */public class Race implements Runnable{ private String winner;//胜利者 @Override public void run() { //模拟兔子睡觉 if (Thread.currentThread().getName().equals("兔子")) .原创 2021-06-28 22:29:32 · 167 阅读 · 0 评论 -
Java零基础学java之多线程--04初始并发问题
//多个线程同时操作一个对象//买火车票的例子//发现问题,多个线程操作同一个资源的情况下,线程不安全,数据紊乱public class TestThread04 implements Runnable{ //票数 private int ticketNums = 10; @Override public void run() { while (true) { if (ticketNums<=0){ //票抢完了退出循.原创 2021-06-28 20:11:33 · 52 阅读 · 0 评论 -
Java零基础学java之多线程--03线程案例(网图下载)
import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.URL;//练习Thread,实现多线程同步下载图片/** 1. 需要一个下载器(创建一个下载器类)* 2. 下载器里定义一个下载方法(通过FileUtils工具类中的copyURLToFile(URL,name)方法) copyURLToFile()把URL变成一个文件* 3. .原创 2021-06-28 20:10:14 · 95 阅读 · 0 评论 -
Java零基础学java之多线程--02线程的创建方式
线程创建Thread、Runnable、Callable三种创建方式Thread自定义线程类继承Thread类重写**run()**方法,编写线程执行体创建线程类对象,调用**start()**方法启动线程线程不一定立即执行,CPU安排调度线程创建方法一:package com.li.create_thread;/** 创建线程方式一:* 1. 继承Thread类* 2. 重写run()方法* 3. 调用start开启线程(new 线程类对象 再调用start()开启线原创 2021-06-28 19:28:53 · 54 阅读 · 1 评论 -
Java零基础学java之多线程--01线程的概念
普通方法和多线程程序·进程·线程一个进程可以有多个线程,如视频中同时听到声音、看图像、看弹幕,等等Process 与 Thread程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念而进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位通常一个进程可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位注意:很多多线程是模拟出来的,真正的多线程是指由多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一原创 2021-06-28 16:54:09 · 55 阅读 · 0 评论 -
Java零基础学java之网络编程
网络编程1.1、概述网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。计算机网络:指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程的目的:无线电台…传播交流信息,数据交换,通信想要达到这个效果需要什么:如何准确的定位网络上的一台主机 192.168.16.124 : 端口,定位到这个计算机上的某个资源找到这个主机,如何传输数据呢?java原创 2021-06-28 11:08:37 · 95 阅读 · 0 评论 -
Java零基础学java之IO流--16IO流案例03
package com.io_.homework;import org.junit.Test;import java.io.*;import java.util.Properties;public class HomeWork03 { public static void main(String[] args) throws IOException { /* * 1. 要编写一个 dog.properties * name=tom原创 2021-06-26 13:21:24 · 91 阅读 · 0 评论 -
Java零基础学java之IO流--16IO流案例02
package com.io_.homework;import java.io.*;public class HomeWork02 { public static void main(String[] args) throws IOException { /* * 使用BufferedReader读取一个文本文件,为每一行加上行号, * 再连同内容一并输出到屏幕上 */ //1. 定义需要读取文本文件的路径原创 2021-06-26 13:20:37 · 81 阅读 · 0 评论 -
Java零基础学java之IO流--16IO流案例01
package com.io_.homework;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class Homework01 { public static void main(String[] args) throws IOException { /* * 1. 判断e盘下是否有文件夹mytemp,如果没有就创建mytemp原创 2021-06-26 13:20:05 · 61 阅读 · 0 评论 -
Java零基础学java之IO流--15Properties配置文件03
package com.io_.properites_;import java.io.FileOutputStream;;import java.io.IOException;import java.util.Properties;public class PropertiesMethod02 { public static void main(String[] args) throws IOException { //使用Properties 类来创建 配置文件 修原创 2021-06-25 22:38:31 · 79 阅读 · 0 评论 -
Java零基础学java之IO流--15Properties配置文件02
package com.io_.properites_;import java.io.FileReader;import java.io.IOException;import java.util.Properties;public class PropertiesMethod01 { public static void main(String[] args) throws IOException { /* * 1. load: 加载配置文件的键值对到P原创 2021-06-25 22:36:55 · 81 阅读 · 0 评论 -
Java零基础学java之IO流--14打印流(PrintStream/PrintWriter)
//PrintStreampackage com.io_.print_;import java.io.IOException;import java.io.PrintStream;public class PrintStream_ { public static void main(String[] args) throws IOException { // 打印流 PrintStream(字节打印流) // 打印流只有输出流,没有输入流原创 2021-06-25 20:07:17 · 99 阅读 · 0 评论 -
Java零基础学java之IO流--13乱码转换流(InputStreamReader/OutputStreamWriter)
inputstreamreaderpackage com.io_.inputstreamreader_;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;public class InputStreamReader_ { public static void main(String[] args) throws Exception{原创 2021-06-25 19:00:36 · 585 阅读 · 0 评论