- 博客(54)
- 收藏
- 关注
原创 Java编程基础
参考:1,AcWing :https://www.acwing.com/activity/content/introduction/1877/2,廖雪峰 Java 教程 :https://www.liaoxuefeng.com/wiki/12525995483437443,韩顺平 : https://www.bilibili.com/video/BV1fh411y7R8?p=1
2023-01-07 16:23:01 364
原创 TCP网络编程
TCP实现聊天需求:客户端发送信息给服务端,服务端将数据显示在控制台上。客户端1,连接服务器Socket2,发送消息import org.omg.CORBA.portable.UnknownException;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;import java.nio.charset
2022-01-24 14:20:19 1999
原创 网络通信的要素
如何实现网络中的主机互相通信? 通信双方的地址 : 1,IP 2,端口号 【比如说我们这里上课使用的就是局域网,你们连接到我的电脑,就能查看到我电脑的画面了】 一定的规则:(即,网络通信协议,有两套参考模型) 1,OSI 参考模型:模型过于理想化,未能在因特网上进行广泛推广! 2,TCP/IP 参考模型:TCP/IP协议,事实上的国际标准。小总结: 1. 网络编程中有两个主要的问题: (1)如何准确的定位网络上一台或多台主机;定位主机上的特定的应用..
2022-01-23 13:25:22 2413
原创 网络编程概述
1.1概述Java是Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java的本机安装系统里,由JVM进行控制。并且Java实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大,功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件,软件,.
2022-01-22 22:14:11 272
原创 多线程总结
import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;//回顾总结线程的创建public class ThreadNew { public static void main(String args[]){ new MyThread1().start(); new Thread(new MyThread2()).start(); FutureTas.
2022-01-22 21:20:48 147
原创 线程池的一点小结
1,背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。2,思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。3,好处:(1)提高响应速度(减少了创建新线程的时间)(2)降低资源消耗(重复利用线程池中线程,不需要每次都创建)(3)便于线程管理(....) corePoolSize:核心池的大小 maximumPoolSize:最大线程数...
2022-01-17 20:33:50 64
原创 线程协作(生产者消费者模式)
线程通信应用场景 : 生产者和消费者问题 1,假设仓库中只能存放一件产品 , 生产者将生产出来的产品放入仓库 , 消费者将仓库中产品取走消费。2,如果仓库中没有产品 , 则生产者将产品放入仓库 , 否则停止生产并等待 , 直到仓库中的产品被消费者取走为止。3,如果仓库中放有产品 , 则消费者可以将产品取走消费 , 否则停止消费并等待,直到仓库中再次放入产品为止。线程通信——分析这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件。..
2022-01-17 20:26:10 67
原创 Lock(锁)
1,从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当。2,java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象。3,ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是Re
2022-01-15 15:13:18 133
原创 死锁的一点总结
定义:多个线程各自占有一些共享资源 , 并且互相等待其他线程占有的资源被释放才能运行,而导致两个或者多个线程都在等待对方释放资源 , 而都在停止执行的情形。某一个同步块同时拥有 “ 两个以上对象的锁 ” 时,就可能会发生 “ 死锁 ” 的问题。...
2022-01-15 14:52:36 300
原创 线程同步的小结及衍生扩展
线程同步机制线程同步是指多个线程操作同一个资源并发是指同一个对象被多个线程同时操作现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题,比如,食堂排队打饭,每个人都想吃饭,最天然的解决办法就是排队,一个个来处理多线程问题时 , 多个线程访问同一个对象 , 并且某些线程还想修改这个对象 . 这时候我们就需要线程同步。线程同步其实就是一种等待机制 , 多个需要同时访问此对象的线程进入这个对象的等待池形成队列, 等待前面线程使用完毕 , 下一个线程再使用 由于同一进程..
2022-01-15 13:54:53 74
原创 守护线程的小结
1,线程分为用户线程和守护线程 2,虚拟机必须确保用户线程执行完毕 main()等3,虚拟机不用等待守护线程执行完毕 gcc等4,如,后台记录操作日志,监控内存,垃圾回收等待..//测试守护线程//上帝守护你public class TestDaemon { public static void main(String args[]){ God god = new God(); You you = new You(); ...
2021-12-16 15:20:23 557
原创 线程的优先级
1,Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度 器按照优先级决定应该调度哪个线程来执行。2,线程的优先级用数字表示,范围从1~10. Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread.NORM_PRIORITY = 5;3,使用以下方式改变或获取优先级 .getPriority()...
2021-12-16 15:04:18 337
原创 三种实现报时的代码
要求:创建一个程序实现当前时间显示,要求每秒显示一次方法一:前置知识:Java中SimpleDateFormat的用法介绍(代码示例)-java教程-PHP中文网https://www.php.cn/java-article-415360.htmljava中的System.currentTimeMillis()是什么?时间的单位转换以及方法的使用_代码从一开始的博客-CSDN博客_currenttimemillishttps://blog.csdn.net/qq_37370132/article
2021-12-14 11:51:56 175
原创 观测线程状态
//观察测试线程的状态public class TestState { public static void main(String args[]) throws InterruptedException{ Thread thread = new Thread(()->{ for (int i=0;i<5;i++){ try{ Thread.sleep(1000)...
2021-12-13 15:37:16 156
原创 线程强制执行小结
1,join合并线程,待此线程执行完成后,再执行其他线程,其他线程堵塞2,可以想象成插队//测试join方法//想象为插队public class TestJoin implements Runnable{ public void run(){ for (int i=0;i<100;i++){ System.out.println("线程vip来了"+i); } } public static void ma
2021-12-13 15:21:31 4124
原创 线程礼让小结
1,礼让线程,让当前正在执行的线程暂停,但不堵塞2,将线程从运行状态转为就绪状态3,让cpu重新调度,礼让不一定成功!看cpu心情左图礼让成功了,右图礼让不成功//测试礼让线程//礼让不一定成功,看CPU心情public class TestYield { public static void main(String args[]){ MyYield myYield = new MyYield(); new Thread(myYield,"a
2021-12-13 15:13:39 47
原创 线程休眠小结
1,sleep (时间) 指定当前线程阻塞的毫秒数;(1s=1000ms)2,sleep存在异常InterruptedException; 3,sleep时间达到后线程进入就绪状态; 4,sleep可以模拟网络延时,倒计时等。 5,每一个对象都有一个锁,sleep不会释放锁;例子:抢票//模拟网络延时:放大问题的发生性public class TestSleep implements Runnable{ //票数 private int ticketNums
2021-12-13 14:52:19 159
原创 线程停止小结
停止线程:1,不推荐使用JDK提供的 stop()、 destroy()方法【已废弃】2,推荐线程自己停下来3,建议使用一个标志位进行终止变量,当flag==false,则终止线程运行//测试stop//1,建议线程正常停止--->利用次数,不建议死循环//2,建议使用标志位--->设置一个标志位//3,不要使用stop或者destroy等过时或者JDK不建议使用的方法public class TestStop implements Runnable{ ...
2021-12-13 14:25:18 56
原创 Lamda表达式
作用:1,避免匿名内部类定义过多2,可以让你的代码看起来很简洁3,去掉了一堆没有意义的代码,只留下了核心逻辑其实质属于函数式编程的概念:(params)->expression[表达式](params)->statement[语句](params)->{statements}理解函数式接口是学习lamda表达式的关键所在函数式接口的定义: 任何接口,如果只包含唯一一个方法,那么它就是一个函数式接口 public interf...
2021-12-12 18:41:38 216
原创 静态代理知识
实现静态代理对比Thread静态代理://静态代理模式总结://真实对象和代理对象都要实现同一个接口//代理对象要代理真实角色//好处://代理对象可以做很多真实对象做不了的事情//真实对象专注做自己的事情public class StacticProxy { public static void main(String args[]){ You you = new You(); //你要结婚 WeddingCompany weddingCo
2021-12-12 17:02:36 233
原创 线程创建的三种方式
1,Thread class 继承Thread类分三步:1,自定义线程类继承Thread类2,重写run()方法,编写线程执行体3,创建线程对象,调用start()方法启动线程//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程public class TestThread1 extends Thread{ public void run(){ //run方法线程体 for (int i=0;i<20;..
2021-12-12 16:40:03 369
原创 线程、进程、多线程
普通方法调用和多线程一个进程可以有多个线程,当然一个进程至少有一个线程不然没有存在的意义如果是单核,同时执行是错觉,因为切换的很快核心概念:1,线程就是独立的执行路径2,在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程3,main()称之为主线程,为系统的入口,用于执行整个程序4,在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为的干预的5,对同一份资源操作时,会存在资源抢夺的问题,需要
2021-12-09 14:53:25 241
原创 自定义异常
使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。 用户自定义异常类,只需继承Exception类即可。 在程序中使用自定义异常类,大体可分为以下几个步骤: 1,创建自定义异常类。 2,在方法中通过throw关键字抛出异常对象。3,如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的 声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。4,在出现异常方法的调用者
2021-12-08 15:23:53 209
原创 捕获和抛出异常
抛出异常捕获异常异常处理五个关键字: try catch finally throw throws举例:先写一段异常代码public class Application{ public static void main(String args[]){ int a = 1; int b = 0; System.out.println(a/b); }}正常情况下报错:表示除数...
2021-12-08 14:57:26 182
原创 Error和Exception
实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据 可能是空的等。我们的程序在跑着,内存或硬盘可能满了。等等。 软件程序在运行过程中,非常可能遇到刚刚提到的这些异常问题,我们叫异常,英文是:Exception,意思是例外。这些,例外情况,或者叫异常,怎么让我们写的程序做出合理的处理。而不至于程序崩溃。 异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连
2021-12-08 14:08:15 52
原创 内部类的知识
内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了1,成员内部类public class Outer{ private int id; public void out(){ System.out.println("这是外部类的方法"); } public class Inner{ public void in(){ System.ou
2021-12-08 13:49:18 42
原创 接口的分析
普通类:只有具体实现抽象类:具体实现和规范(抽象方法)都有接口:只有规范,自己无法写方法 接口就是规范,定义的是一组规则,体现了现实世界中的“如果你是。。。则必须能。。。”的思想。声明类的关键字是class,声明接口的关键字是interface//抽象的思维 架构//interface定义的关键字,接口都需要有实现类public interface UserService { //常量 public static final int AGE = 99; ..
2021-12-08 13:01:37 675
原创 类的三大属性
一,封装该露的露,该藏的藏 我们程序设计要追求“高内聚、低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用封装(数据的隐藏) 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。记住这句话就够了:属性私有,get/set例子:结果无法被调用(如图变红)正确代码:public class Student{ //属性私有 private Str...
2021-12-08 12:34:50 1719
原创 类与对象的创建
在对类和对象命名时注意见名知意,特别是类类中的构造器也成为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:1,必须和类的名字相同2,必须没有返回类型,也不能写void...
2021-12-07 15:44:42 41
原创 稀疏数组(压缩算法)
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组稀疏数组的处理方式是:1,记录数组一共有几行几列,有多少个不同值2,把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模如下图:左边是原始数组,右边是稀疏数组注意:第一行是有多少行、多少列、多少个不同值,其他行是按照数组标准看的,起始为0例子:public class demon{ public static void main(String args[]){.
2021-12-06 21:18:14 298
原创 Arrays类
数组的工具类 java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注意:是“不用”而不是“不能”)具有以下常用功能:给数组赋值:通过fill方法对数组排序:通过sort方法,按升序比较数组:通过equals方法比较数组中元素值是否相等查找数组元素:通
2021-12-06 20:12:00 105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人