Java基础
Java基础包括但不限于多线程、JDBC、IO、JavaWeb
诗与猿方
一个乐于分享、乐于交流的互联网从业者,欢迎关注与私信
展开
-
Java------Stream流式编程高级API【groupingBy、flatMap】(六)
此时的key是多个属性字段拼接而成。groupingBy分组分类,可以通过。groupingBy分组分类,可以通过。此时的key就是单个属性字段。原创 2023-04-13 16:53:26 · 571 阅读 · 0 评论 -
JDBC学习(二)---------连接池和&DBUtils
JDBC连接池目的:主要解决数据库一直申请链接,释放连接所产生的资源浪费,提升代码性能。获得连接和释放资源非常耗系统资源,通常使用连接池技术,共享Connection。通过池来管理Connection,重复利用。归还连接时调用close(),但是不是销毁连接,而是归还连接,将连接放在连接池中。java为数据库连接提供的公共结构:java.sql.DataSoure。常见的连接池:DBCP(占...原创 2019-08-11 16:38:09 · 176 阅读 · 0 评论 -
JDBC学习(一)--------SQL注入
一、JDBC的开发步骤1.注册驱动2.获得连接3.获得语句执行者4.执行sql语句5.处理结果’二、导入驱动jar包1.创建lib目录,用于存放项目所需要的jar包。选中jar包,复制粘贴即可。2.选择lib目录下的jar包,右键执行build path—Add to Build Path。三、API详解,注册驱动代码:Class.forName(“com.mysql.jdb...原创 2019-08-04 22:16:44 · 151 阅读 · 0 评论 -
JavaWeb问题及解决方法------数据类型转换
byte->short->char->int->long->float->double1->2->2->4->8->4->8位数低->位数高由低到高,数据能够自动转换由高到低,需要强制转换为什么Double不能够强转为int型?double却可以?Double是double的封装类,Double定义的数据,其...原创 2019-09-08 20:59:03 · 786 阅读 · 0 评论 -
JavaWeb问题及解决方法----------编码问题
Content-Type用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件CharacterEncoding作用是设置对客户端请求进行重新编码的编码也就是说一个是设置读,一个是设置取...原创 2019-09-08 20:50:54 · 166 阅读 · 0 评论 -
JSP知识点----------9大隐式对象
在jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕。在jsp脚本中可以直接使用这9个对象。这9个对象之所以能用,因为在service方法中被定义并初始化。PageContext pageContext:JSP的页面容器,是一个域对象。作用域在当前页面内部有效。作用并不大,可以直接使用局部变量。pageContext还可以向其他域存储数据。并且内部维护着其他8大隐...原创 2019-08-29 20:50:25 · 241 阅读 · 0 评论 -
JAVA-----IO篇(概念介绍以及FileIputStream)一
JAVA-----IO篇io主要是对内存以及硬盘之间的输入、输出操作进行定义。i:即使input。o:即使output。输入(input)、输入流(inputStream)、读(read):都是将硬盘中的信息传递到内存中。硬盘—>内存。输出(output)、输出流(outputStream)、写(Write):则是内存---->硬盘。其实可以看做对象序列化的过程(不知道这样说是否确切)。这两个顺序容易搞混,需要明确记忆。【主角是内存】,所谓输入、输出都是对于内存而言。对io流进行分类原创 2020-06-12 10:31:56 · 238 阅读 · 0 评论 -
JAVA-----IO篇二(FileOutputStream以及文件拷贝)
啊啊啊啊啊原创 2020-06-16 10:49:53 · 211 阅读 · 0 评论 -
JAVA-----IO篇四(缓冲流BufferedWriter以及BufferedReader、转换流outputStreamWriter以及inputStreamWriter)
JAVA-----IO篇四(缓冲流BufferedWriter以及BufferedReader)使用BufferedWriter、BufferedReader能够自带缓冲,不需要指定char或者byte数组。BufferedReaderbuffer流的构造方法与其他的流不同,传入的参数是Reader对象,有两个构造方法:BufferedReader(Reader in): 创建一个使用默认大小输入缓冲区的缓冲字符输入流。BufferedReader(Reader in,int sz):创建一个使用原创 2020-06-18 10:54:24 · 2264 阅读 · 0 评论 -
JAVA-----IO篇六(标准输出流PrintStream以及简易日志实现)
JAVA-----IO篇六(标准输出流PrintStream以及简易日志实现)PrintStream标准输出流有两种:PrintWriter以及PrintStream。这里只讲PrintStream,PrintStream是日常使用最多的输出流,System.out.println(),调用的其实就是PrintStream的println方法。根据源码可知。System是一个类,而System.out中,out是该类中的属性,并且有final static进行修饰,该属性的类型正是PrintStr原创 2020-06-19 11:35:56 · 408 阅读 · 0 评论 -
JAVA-----IO篇五(数据流DataInputStream以及DataOutputStream)
JAVA-----IO篇五(数据流DataInputStream以及DataOutputStream)DataInputStream和DataOutputStream属于数据流,在写数据时,能够将数据连同数据的类型一并写入文件。DataOutputStream写的文件,只能够通过DataInputStream读取,并且写、读顺序要一致!不一致时会出现随机数,可以当做加密方式的一种。DataOutputStreampublic class DataOutputStreamTest { publ原创 2020-06-18 18:03:29 · 487 阅读 · 0 评论 -
JAVA-----IO篇七(File类)
JAVA-----IO篇七(File类)java.io.File继承自java.lang.Object,继承了Serializabe和Comparable接口。由此可见File类和之前IO流所述的四大家族(inputStream、outputStream、Reader、Wirter)并没有关系。File类也并非是一个流,仅仅通过File类,无法完成文件的读和写。文件和目录路径名的抽象表示形式:File需要掌握File类的常用方法。exists():判断该File对象是否存在。返回true,fals原创 2020-06-20 11:18:05 · 265 阅读 · 0 评论 -
JAVA-----IO篇三(FileReader以及FileWriter)
JAVA-----IO篇三(FileReader以及FileWriter)其实FileReader与FileInputStream在具体使用上方法类似,并且二者所用的方法也差不多,无外乎wirte、skip、close,唯一区别在于FileReader是字符流,一次读取一个字符。使用char数组作为存储。这里制作简单演示,可以结合IO篇一的内容理解。【能用记事本编辑的都是普通文本文件,不一定是txt,.java文件也属于普通文本文件】import java.io.*;/** * @author原创 2020-06-16 11:29:58 · 169 阅读 · 0 评论 -
lambda表达式
lambda表达式的一般构成:参数, 箭头(->) 以及一个表达式代码无法放到一行表达式中时,可以使用{},像方法一样将多行代码放在{}中,a->{}示例:(String first,String second)->first.length()-second.length();可以传入多个参数,也可以对参数类型进行忽略,表达式可以放在一行时{},可以忽略。示例二:(int x)->{ System.out.println(x);return x*x;}传入参数类型也可原创 2020-11-02 11:19:33 · 975 阅读 · 0 评论 -
Java------多线程_高级主题_CAS_原子操作(十七)
Java------多线程_高级主题_CAS_原子操作(十七)CAS锁分为两类:1.悲观锁:synchronized是独占锁即悲观锁,会导致其他所有需要锁的线程挂起,等待持有锁的线程释放锁。2.乐观锁:每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。根据不同的角度也有不同的分类方法,在可沿用性的角度,分为可重入和不可重入。还可以分为公平锁和不公平锁,所谓是否公平是锁在应用时会加入到队列中,如果是按照先后顺序去使用这个锁,就叫做公平锁,如果不按照队列顺序叫做不公平锁原创 2021-12-15 16:31:56 · 273 阅读 · 0 评论 -
Java------多线程_高级主题_可重入锁_原理实现(十六)
Java------多线程_高级主题_可重入锁_原理实现(十六)可重入锁:锁作为并发共享数据保证一致性的工具,大多数内置锁都是可重入的,也就是说,如果某个线程试图获取一个已经由它自己持有的锁时,那么这个请求会立刻成功,并且会将这个锁的计数值加1,而当线程推出同步代码块时,计数器会递减,当数值等于0时,锁释放,如果没有可重入的支持,在第二次企图获得锁时,将会进入死锁状态,可重入锁随处可见。案例一:可重入锁package cooperation;/** * 可重入锁:锁可以延续使用 */pub原创 2021-12-13 11:11:51 · 347 阅读 · 0 评论 -
Java------多线程_高级主题_dcl单例模式_ThreadLocal(十五)
Java------多线程_高级主题_dcl单例模式_ThreadLocal(十五)对外只有一个对象,使用一个地址。单例模式模式有多种书写模式,此处volatile和double-checking实现。package cooperation;/** * 单例模式:对外存在一个对象(懒汉式基础上加上并发控制) * 1.构造器私有化,避免new对象 * 2.提供私有静态属性,存储对象的地址 * 3.提供公共静态方法,访问该静态属性 */public class DoubleChecking原创 2021-12-09 18:08:36 · 365 阅读 · 0 评论 -
Java------多线程_高级主题_happenbefore_volatile(十四)
Java------多线程_高级主题_happenbefore_volatile(十四)当写的代码没有按照期望的顺序执行,因为编译器和CPU会尝试指令重排,使代码更快的运行。1.从内存拿到一条指令,将指令进行解码翻译2.从寄存器获取对应值3.执行代码,执行指令4.将结果写会寄存器happenbefore指令重排会对多线程的结果产生影响。编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段(一些代码慢,一些代码快,先执行快的,即使这部分代码在后面,减少CPU的空闲,提高执行原创 2021-12-09 16:57:08 · 624 阅读 · 0 评论 -
Java------多线程_高级主题_定时调度_quartz(十三)
Java------多线程_高级主题_定时调度_quartez(十三)定时调度通过Timer和Timetask,可以实现定时启动某个线程。java.util.Timer:类似闹钟的功能,本身实现的就是一个线程。java.util.TimerTask:一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。Timer:线程调度任务,以供将来在后台线程中执行的功能。任务可以安排一次执行,也可以定期多次执行。TimerTask:可以由Timer进行一次性或重复执行的任务。抽象类,重写ru原创 2021-12-07 13:44:34 · 320 阅读 · 0 评论 -
Java------多线程_并发与协作_生产者消费者模式_管程法_指示灯法(十二)
Java------多线程_并发与协作_生产者消费者模式(十二)线程与线程之间如何通讯。原创 2021-12-06 15:03:38 · 365 阅读 · 0 评论 -
Java------多线程_并发_死锁_产生与解决(十一)
Java------多线程_并发_死锁_产生与解决(十一)死锁:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情况,某一个同步块同时拥有“二个以上对象的锁”时,就可能会发生死锁的问题。案例以:两个人化妆,同时想涂口红、照镜子。锁套锁,就会产生死锁/** * 死锁 */public class ThreadDeadLock { public static void main(String[] args) {原创 2021-12-03 15:15:09 · 352 阅读 · 0 评论 -
Java------多线程_并发_同步_快乐火车例子以及ArrayList的并发容器(十)
Java------多线程_并发_同步_快乐火车例子以及ArrayList的并发容器(十)将之前电影院购票的例子,修改为synchronized方法块的形式。但是有两个疑问1.为什么这里面的两个类,不用@Override run()方法?2.为什么是Customer2 .start而执行的是Cinema2 的方法?/** * 火车购票例子 */public class ThreadSyn052 { public static void main(String[] args) {原创 2021-12-03 14:44:27 · 483 阅读 · 0 评论 -
Java------多线程_并发_同步_性能分析与影院例子(九)
Java------多线程_并发_同步_性能分析与影院例子(九)同步块可以更小的锁定资源。将之前的抢票案例修改一下由同步方法,改为同步块格式。该案例:线程由两个因素决定,分别是票数、和falg标识,但synchronized同步块只能锁一个内容。因此需要包装。案例一:/** * 线程安全:保证数据的安全性,同时效率尽可能高 * 第一个例子:抢票 * synchronized:同步块与同步方法,效率对比 */public class ThreadSyn04 { public s原创 2021-12-03 10:25:36 · 270 阅读 · 0 评论 -
Java------多线程_并发_同步_队列与锁_synchronized(八)
Java------多线程_并发_同步_队列与锁(八)线程同步其实就是一种等待机制,多个需要同时访问此对象的线程,进入这个对象的等待池形成队列,等待前面的线程使用完毕后,下一个线程再使用。锁保证线程安全,实现线程同步。由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突的问题。为了保证数据在方法中被访问时的正确性,在访问时加入“锁机制(synchronized)”,当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可。存在以下问题:1.一个线程持有锁会原创 2021-12-02 17:49:52 · 123 阅读 · 0 评论 -
Java------多线程_并发_非同步_三大经典案例 (七)
Java------多线程_并发_非同步_三大经典案例 (七)线程同步要保证数据的安全性和正确性,以及性能。代码上使用synon高性能、高并发、高可用并发:同一个对象多个线程同时操作。并发的三个条件缺一不可,同一对象、多个线程、同时操作。之前模拟抢票代码时,多个线程同时对一份资源进行操作,导致出现两种数据错误的表现:1.抢到最后出现负数的情况。2.抢的过程中出现多个线程使用同一票数的情况。多个线程从主存空间拷贝到各自工作内存中数据不一致。/** * 线程不安全:数据出现负数、出现线程原创 2021-12-01 15:46:34 · 326 阅读 · 0 评论 -
Java------多线程_深度观察状态_优先级_守护线程(六)
Java------多线程_深度观察状态_优先级_守护线程(六)深度观察状态就绪状态和运行状态在计算机中都显示为Runnable。State对象,Thread.state,线程状态的类在java文档中,又将线程状态细分。分为6种状态1.New,即新生状态,尚未启动的线程处于该状态。2.Runnable,包括就绪和运行状态3.BLOCKED,阻塞中的IO、waite。4.waiting,阻塞中的sleep。5.timed_waiting,阻塞中的有时间的sleep,正在等待另一个线程执行动作原创 2021-12-01 10:03:18 · 269 阅读 · 0 评论 -
Java------多线程_终止_暂停sleep_礼让yield_插队join(五)
Java------多线程_插队join线程停止1.不使用JDK提供的stop()/destory()方法(他们本身也被JDK废弃)。2.提供一个boolean型的终止变量,当这个变量置为false,则终止线程。示例代码:/** * 终止线程 * 1.线程正常执行完毕--》次数 * 2.外部干涉,加入标识,不要使用stop、destory, */public class ThreadStop implements Runnable{ private boolean flag =原创 2021-12-01 08:57:03 · 125 阅读 · 0 评论 -
Java------多线程状态(四)
Java------多线程状态(四)线程一生有5大状态,分别是:新生状态就绪状态运行状态阻塞状态死亡状态新生状态–start()----就绪状态----获得执行权—运行状态----run方法结束—死亡状态。运行状态----失去执行权----就绪状态。运行状态----wait()—等待阻塞。运行状态-----synchronized----同步阻塞。运行状态-----sleep/join(),I/O流阻塞等-----其他阻塞。等待阻塞----notify()-----同步阻塞。同步阻原创 2021-11-29 18:02:43 · 227 阅读 · 0 评论 -
Java------推导lambda_简化线程(三)
Java------推导lambda_简化线程当线程用的次数比较少时。可以用lambda表达式。lambda避免匿名内部类定义过多。实质属于函数式编程的概念第一步推导:/** * Lambda表达式 简化线程(用一次)的使用 */public class ThreadLambda { //当一个类只使用一次时,可以将这个类作为静态内部类 //不使用,则不会编译 static class Test implements Runnable{ @Overri原创 2021-11-29 10:20:44 · 308 阅读 · 0 评论 -
Java------多线程基础Callable与静态代理模式
Java------多线程基础Callable创建线程的第三种方式,实现Callbale接口重写call方法。1.创建目标对象:2.创建执行服务3.提交执行4.获取结果5.关闭服务比run方法优秀的地方在于,call方法可以throws异常,并且有返回值。用起来比runnable麻烦,需要借助服务和线程池。//给Callable加个泛型,该泛型就是返回值类型,默认是Objectpublic class TDownLoad implements Callable<Boolean>原创 2021-11-29 09:22:50 · 136 阅读 · 0 评论 -
Java------多线程基础Thread与Runnable模拟并发抢夺资源
线程与进程操作系统中会存在多个进程:这些进程包括系统进程、以及用户进程。系统进程指:操作系统内部建立的进程。用户进程指:用户程序建立的进程。进程和线程的区别:1.进程和进程之间不共享内存,进程是在独立的内存空间中运行的。2.而线程则可以共享系统分配给这个进程的内存空间。3.线程不仅能共享进程的内存,也拥有自己的内存空间,这段空间叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据。...原创 2021-11-19 16:00:21 · 887 阅读 · 0 评论