
涨知识(java main)
java,设计模式,http,操作系统等的学习
洛洛大芳
本人在校大学生一枚,还请多多指教
展开
-
网络编程三要素
网络编程三要素协议IP地址端口协议就是我上一篇写的协议,可以去我专栏里面去看IP地址IP地址:指互联网协议地址(Internet Protocol Address),俗称IP。IP地址用来给一个网络中的计算机设备做唯一的编号。假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”。必须通过电话号码才能找到我IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d 的形式,例如192.168.65.100 。其中a、b、c、d都是0~255之间的十进制整原创 2021-08-27 18:01:51 · 220 阅读 · 1 评论 -
网络编程入门介绍
网络编程软件结构网络通信协议UDP通信软件结构C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。网络通信协议TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),它定义了计算机如何连入因特网服务器启动,客户端去去去服务器,两者之间建立一个连接,之原创 2021-08-27 17:47:06 · 184 阅读 · 0 评论 -
http协议
http协议介绍工作原理消息结构请求方式(列举主流的请求方法)状态码介绍Http协议是Hyper Text Trtansfer Protocol,她的全称是超文本运输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议基于TCP/IP通信协议来传递数据,比如说html,文件,图片等等工作原理浏览器作为http客户端通过url向http服务端发送请求常见的http服务器有Tomcat,这是我们最常用的服务器,她接到请求后,向客户端响应发送响应信息http默认端口号是80,可以更改端口号,可原创 2021-08-27 11:17:27 · 201 阅读 · 0 评论 -
file类递归删除文件夹
file类递归删除文件夹首先我们要明白递归的含义,就是把一个大问题分成一个一个的小问题去做,回到删除文件夹这里来,为什么要用递归呢,因为是首先file类不能一次性删完所有的,不能删除成功,只能输出二级目录,如果有多级就不能删除了,那么多级目录其实也是一个目录里面放了一个目录,那么就可以用递归方法来删了,我们来实现一把,上代码package file;import java.io.File;/** * @author 邓亚非 */public class Recursion { p原创 2021-08-26 23:59:00 · 644 阅读 · 0 评论 -
IO流之file-API
file类创建文件判断文件是否存在判断文件夹是否存在判断层级文件夹是否存在判断是否是一个文件判断是否是一个目录判断是否删除成功获取文件内容长度修改文件名称文件数组创建文件package file;import java.io.File;import java.io.IOException;/** * @author 邓亚非 */public class TestFile01 { public static void main(String[] args) { Fi原创 2021-08-26 23:54:32 · 108 阅读 · 0 评论 -
线程池和线程池的创建
线程池什么是线程池为什么需要线程池怎么创建线程池什么是线程池顾名思义,就是把多个线程创建好放在池子里,要想用哪个直接拿就行了,线程池是一种多线程处理方式,将多个任务放在队列中,创建线程之后自动启动这些任务,需要注意的是,这里的线程必须由实现了Runnable接口和Callable接口的线程对象为什么需要线程池如果并发的线程数量很多,并且每个线程都是执行一段时间就结束了,这种要创建多次的线程的效率会大大降低系统的效率,因为创建和销毁都需要时间怎么创建线程池1:创建缓存线程池package co原创 2021-08-26 20:44:53 · 128 阅读 · 0 评论 -
控制并发线程数的Semaphore
控制并发线程数的SemaphoreSemphone是信号量控制同时访问某一个资源的线程数量,以上厕所为例,假如10个人去上厕所,只有三个厕所,我们得让他们合理得去上厕所,不能出现争抢的情况,可以这么做,让他们一组一组的上,当有厕所上的时候下一批在去,租后一个人随机上1.构建线程类,重写run()方法 2.属性name代表人的姓名和控制并发线程数Semaphore类的属性,名为wc --利用此类,来控制10个人(线程)并发的执行,每次最多有3个线程执行(3个人去上厕所) --原创 2021-08-26 15:26:15 · 310 阅读 · 0 评论 -
同步屏障CyclicBarrier
CyclicBarrierCyclicBarrier并发工具类的作用类是让一组线程到达一个屏障,就是同步点时被阻塞,直到最后一个线程到达屏障是才会开始执行后面的代码,所有之前被拦截的线程才会被执行package com.concurrent;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * @author 邓亚非 * 同步屏障工具类 */原创 2021-08-26 15:11:51 · 108 阅读 · 0 评论 -
CountDownLatch
CountDownLatchCountDownLatch允许一个或者多个线程等待其他线程完成操作,当然利用join也可以实现join用于让当前执行线程等待,知道子线程执行结束,她的原理是不停的检查join线程是否存活,如果子线程存活就让当前线程永远等待,就是谁子线程在执行,主线程就不可能执行,就会一直等待直到join线程终止后,线程的notify方法会被调用,在jvm里面实现的,在jkd1.5之后可以有并发包里面的CountDownLatch去实现这个功能我们来写一段代码测试一下CountDown原创 2021-08-26 14:59:24 · 134 阅读 · 0 评论 -
HashMap高并发情况下为什么会发生死循环
原因:其本质原因是因为它不支持线程安全更深入的原因就是它在多线程环境下会形成循环链表hashmap在jdk1.6的时候底层数据结构是数组加链表(entry)在多线程环境下会导致hashmap的entry链表线程环形数据结构,那么entry的节点就会永远不为空,就会线程循环链表,就是死循环hsahmap在jdk1.8的时候底层数据结构是数组,链表,红黑树,在多线程环境下会形成环行结构,产生死循环的问题我们来用代码模拟一下package com.concurrent;import java原创 2021-08-23 21:51:21 · 367 阅读 · 1 评论 -
Thread和Runable的区别
Thread和Runable的区别ThreadRunnable区别Threadpackage com.thread;/** * @author 邓亚非 */public class TestThread extends Thread { @Override public void run() { System.out.println("用Thread类创建线程"); }}Runnablepackage com.thread;/** *原创 2021-08-23 21:13:22 · 157 阅读 · 0 评论 -
notify和notifyAll
notify:notify只会唤醒众多等待线程中的其中一个线程用包子铺案例来演示一下package com.thread;/** * @author 邓亚非 */public class TestNotify { private static Object object=new Object(); public static void main(String[] args) { // 顾客1线程 new Thread(new R原创 2021-08-23 18:25:02 · 332 阅读 · 0 评论 -
匿名内部类创建多线程
匿名内部类创建线程方式一方式二方式三方式一基于Thread类 new Thread(){ @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(i); } } }.start();方式二原创 2021-08-23 18:14:09 · 362 阅读 · 0 评论 -
线程之间通信(包子铺)
我们对前一个线程通信博客做一个生活版的模拟,包子铺老板和顾客之间模拟线程通信,看一下代码吧package com.thread;/** * @author 邓亚非 * 包子铺老板 */public class Boss {// 创建同步对象 private static Object object=new Object(); public static void main(String[] args) {// 顾客线程 new Threa原创 2021-08-23 17:54:43 · 107 阅读 · 0 评论 -
无限等待和唤醒状态
无限等待waiting状态:一个正在无线等待的一个线程需要另一个线程执行notify()方法去唤醒我们来用代码模拟一下package com.thread;/** * @author 邓亚非 */public class Wait { public static void main(String[] args) { Object object=new Object();// 线程1 new Thread(new Runnable()原创 2021-08-23 17:38:31 · 179 阅读 · 0 评论 -
阻塞方法之锁阻塞
锁阻塞通过锁阻塞让线线程进入阻塞状态原创 2021-08-23 17:20:44 · 203 阅读 · 0 评论 -
通过计时让线程进入等待状态
通过模拟计时器让线程进入等待状态代码如下:package com.thread;/** * @author 邓亚非 */public class TimeWait implements Runnable{ public static void main(String[] args) { TimeWait timeWait=new TimeWait(); Thread thread=new Thread(timeWait); thre原创 2021-08-23 16:45:43 · 100 阅读 · 0 评论 -
线程安全的解决
线程安全问题当我们使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题.要解决上述多线程并发访问一个资源的安全性问题:也就是解决重复票与不存在票问题比如说卖票,如果三个窗口就是三个线程同时卖100张票,如果同时迈出了一眼的票,就是出现了线程安全的问题我们来模拟一下我们创建一个卖票的线程package com.thread;/** * @author 邓亚非 */public class ThreadSafe implements Runnable{原创 2021-08-23 16:24:50 · 133 阅读 · 0 评论 -
浅谈高并发
浅谈高并发是指可以让软件系统在一段时间内能够处理大量的请求。比如每秒钟可以完成100万个请求每年的双十一的购物网站和app就会出现高并发的现象,这已经见怪不怪了哈哈哈下面我用代码来带大家体验一下高并发对cpu的消耗方式一:package com.thread;/** * @author 邓亚非 * 模拟高并发 */public class HighConcurrency extends Thread{ public static void main(String[] ar原创 2021-08-21 22:29:52 · 187 阅读 · 0 评论 -
生产者和消费者之间的线程通信
线程通信:生产者和消费者之间的关系前面几期已经跟大家讲了,不懂生产者和消费者之间的关系可以去看我之前的文章,今天主要讲他们之间的线程通信线程通信就是线程之间可以交流,你告诉我要干什么,我告诉你要干什么,有两个很重要的方法notify()和wait(),顾名思义一个通知,一个等待那么为什么要线程通信呢,既然他们两个是互不影响的,因为可能出现逻辑错误,比如说生产者在生产者的时候,此时消费者应该在等待,不能够去消费,比如说你去买面包,但是此时第一批已经卖完了,此时你是不可以消费的,所以说如果你还在消费原创 2021-08-21 21:49:49 · 195 阅读 · 0 评论 -
模拟死锁案例
我们来模拟一个死锁的案例现在有张三想要李四的画,李四想要张三的书。张三对李四说了:“你给我画,我就把书给你”。李四也对张三说了:“你给我书,我就把画给你”。此时,张三在等着李四的答复,而李四也在等着张三的答复,那么这样下去的最终结果就是张三得不到李四的画,李四也得不到张三的书。这实际上就是死锁的概念。张三类package com.thread;/** * @author 邓亚非 */public class ZhanSan { /** * 张三问李思要画原创 2021-08-21 17:09:37 · 99 阅读 · 0 评论 -
死锁和哲学家进餐问题
什么是死锁死锁的定义就是几个线程所需要的资源都在对方的手,而对方都不释放手中的所,就是不释放手里的资源,然后就这么等下去,就产生了一个死循环,就一直在等待(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。死锁不是程序一旦启动就会发生的,可以说她是一个偶然现象,我们必须得避免这种现象诞生通俗的说就是张三想要李四的画,李四想要张三的书,张三说你我想一想,等几天给你答复,李死说你也再等一下,过几天再给你答复,然后就这样一直等对方的答复,然后双方都得不到对方想要的对原创 2021-08-21 16:38:57 · 438 阅读 · 0 评论 -
wait和sleep的区别
wait通过wait方法进入阻塞后,要想被唤醒,必须等到和当前进入到等待池中的线程拥有同一把线程安全锁对象的另一个线程调用notify()方法唤醒,然后这次进入到锁池wait()方法必须放在同步方法当中,或者同步块中wait()方法是object类的sleepsleep()方法是指休眠指定时间之后,时间一旦达到,重新回到就绪状态,等到cpu分配资源sleep()方法会释放锁,而wait方法则不会sleep()方法是属于Thread类的...原创 2021-08-21 15:17:19 · 87 阅读 · 0 评论 -
工厂设计模式
什么是工厂设计模式工厂模式是平时开发过程中最常见的设计模式。工厂模式解决类的实例化问题,它属于创建型模式。试想你去披萨店买一个披萨。你只需要告诉老板要一个xx披萨。过一会就会有一个此类型的披萨被制作出来。而你完全不需要知道这个披萨是怎么被制作出来的。这个例子中你就是客户端代码,披萨店就是工厂,负责生产披萨。披萨是接口,而具体的某一种汉堡,比如说香辣披萨,就是实现了汉堡接口的类。接下来以代码来演示一下吧创建一个Pizza抽象类,因为我们要制作不同的披萨package factory;/**原创 2021-08-19 23:46:17 · 86 阅读 · 0 评论 -
生产者和消费者
一,生产者生产一样东西的人就是消费者,java里面生产数据的线程就是生产者线程package jucdemo;import java.util.Random;/** * @author 邓亚非 * 生产者线程 */public class Producer extends Thread { private SuperMarket superMarket; private String name; public Producer(SuperMarket super原创 2021-08-15 17:42:57 · 106 阅读 · 0 评论 -
string,stringbuilder,stringbuffer三者的区别
stringstring 被final修饰,它是不可变的,是一个最终类,导致每次对string进行字符串的操作时都会新建一个对象,会造成大量的资源空间浪费,而且效率非常低下,package jucdemo;/** * @author 邓亚非 */public class TestString { public static void main(String[] args) { String string="哈哈哈"; string=string+"你原创 2021-08-15 16:30:54 · 107 阅读 · 0 评论 -
线程生命周期的状态
新生用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。 注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常。就绪就绪状态的线程具备了运行的条件,但是还没有分配到cpu,在就绪队列当中等待状态也不是运行状态,只有当系统选中一个的等待执行的thread对象后,就会进入到执行状态,这个过程就是cpu调度,原创 2021-08-15 14:44:20 · 156 阅读 · 0 评论 -
浅谈线程安全和线程不安全
关于线程安全和线程不安全我打算以举例子的方式去说,这样说的比较容易理解问题:比如说全班去买票,那么整个班上的人不可以同时买到同一张票吧,应该是一个人对应一张票,即时你们是同一个地方的人,也不能买到一张票,所以在买票的高峰期就更不能出现这种情况了,线程安全:这里是引用...原创 2021-08-15 13:38:36 · 240 阅读 · 0 评论 -
主线程和子线程
主线程main方法本身就是一个主线程System.out.println(“开始下载”);System.out.println(“下载结束”);子线程继承Thread类的线程是子线程原创 2021-08-13 22:16:12 · 99 阅读 · 0 评论 -
多线程模拟电影下载
多线程模拟五部电影的下载package jucdemo;import javax.swing.*;import java.util.Random;/** * @author 邓亚非 */public class DownLoadMovie extends Thread{ private String mname; public DownLoadMovie(String mname){ this.mname=mname; } publi.原创 2021-08-13 22:04:21 · 183 阅读 · 0 评论 -
线程名字的设置和获取
获取:线程对象.getName()设置:线程对象.setName()常用方法run();//线程体,线程启动后,供CPU调度执行start();//线程启动方法sleep();//线程睡眠方法 根据我们指定的时间进行休眠 进入到阻塞状态getName();//获得线程名字的方法setName();//设置线程名字的方法...原创 2021-08-13 21:48:47 · 110 阅读 · 0 评论 -
线程的生命周期
生命周期新生就绪运行阻塞死亡新生使用new关键字创建一个线程类的时候,就处于新生状态就绪线程对象调用start()方法时,该线程就处于就绪状态,线程获得cpu执行权,获取处理器资源,等待执行运行线程的启动是调用start()方法而不是run()方法,记住永远不要调用run()方法,因为系统会把线程对象当成普通对象,run()方法也将变成一个普通方法去执行假如你直接调用了run()方法,不能直接通过this.getname()方法获得线程名,此时获取的是对象名,因为此时已经没有了线程体原创 2021-08-13 21:31:15 · 81 阅读 · 0 评论 -
线程和进程
什么是线程和进程线程进程线程线程是进程的最小组成单位,每个线程干自己的事单线程一个程序当中只产生了一个任务,也就是一格单独的线程,比如说我就看视频多线程多线程是指一个程序中产生了多个任务并且同时进行,比如说我一边和女朋友打电话一边打游戏,日常生活当中都是可以同时进行多线程侧重的是程序并行执行这样能够提高程序的执行效率,不想单线程逐次执行。线程创建线程的创建主要分为一下三种通过继承Thread类 run()无返回值通过继承Runable接口通过使用Execut原创 2021-08-13 20:55:58 · 86 阅读 · 0 评论 -
面向对象详解一
面向对象什么是面向对象面向对象和面向过程的区别面向对象特性什么是面向对象面向对象和面向过程的区别1.面向对象优点:易维护,易服用,易扩展,面向对象具有封装,继承多态的特性,可设计很多低耦合的系统缺点;性能低2.面向过程:优点是性能比面向对象高,面向对象中的类在调用时需要实例化,占用内存大,消耗资源缺点:没有面向对象那样更好维护面向对象特性1.抽象抽象是把对象的共同特点构造出一个类,它又包括数据抽象和行为抽象,抽象只在乎对象的属性和方法,不在乎方法的具体实现2. 封装隐藏对象的属性和原创 2021-07-10 10:33:06 · 97 阅读 · 0 评论 -
==和equals的区别
==和equals==equals示例==双等于==是用判断两个对象的地址是不是一样的,就是判断是不是一个对象,基本数据类型中比较的是值,引用数据类型比较的是内存地址equalsequals()方法的作用是判断两个对象是否相等,假如类没有重写这个方法,在进行比较时等价于==如果类重写了这个方法,在进行比较时,两个对象的内容是否相等,假如相等返回true,反之返回false示例public class TestDemo10 { public static void main(S原创 2021-07-04 00:29:42 · 99 阅读 · 0 评论 -
java访问修饰符-public,private,protected,default的区别
修饰符的区别publicprivateprotecteddefaultpublic字面意思是公开的,就是说对所有类都可见,类,接口,变量,方法都可以被它修饰private字面意思是私有的,意思是除了本类之外被它修饰的方法,变量不能其他得类所访问,但是不能修饰类哦,尤其是外部类protected字面意思是受保护的意思,就是说它修饰的变量,方法,只能被同一包下的类访问,也不可以修饰类,尤其是外部类default字面意思是默认的,可以不写它,就是说在同一个包下,不使用任何一个修饰符,去修饰类,方法原创 2021-06-25 21:36:34 · 226 阅读 · 0 评论 -
到底什么是字节码?有什么好处?
java里的字节码什么是字节码字节码有什么好处什么是字节码字节码是在程序运行的时候,由java文件编译成.class文件,就是字节码文件.我们也可以写一段代码然后复制在一个文档里,改成java文件,接下来在命令行运行javac 文件名…java 编译成.class文件java 文件名 运行.class文件注意文件名和类名一致字节码有什么好处java语言通过字节码的方式,解决了解释性语言执行效率低的问题,也保留了解释性语言可以移植的特点,.class文件不用重新编译就可以在其他的计算机系统上原创 2021-06-25 11:23:50 · 2435 阅读 · 0 评论 -
什么是编程
什么是编程编程就是让计算机解决问题使用某种编程语言去编写代码解决问题.程序员写出的代码用计算机的方式告诉计算机去执行,这就是编程原创 2021-06-24 22:51:31 · 438 阅读 · 0 评论