
JAVA
文章平均质量分 69
veejaLiu
nice to meet you.
展开
-
Java 多线程-多线程通信
最近,美美非常的爱吃栗子,剥栗子却有些麻烦,这个任务理所当然的交给了帅帅,每一次,帅帅都会把热气腾腾的栗子剥好,然后放进一个盘子里,而美美每次都会从盘子里拿一个栗子吃:我们来模拟一下这个情况,首先,我们定义一个盘子,用来存放我们的栗子:/** * 定义一个盘子 */class Plate { // 栗子存储的空间 private int[] cells = new int[10]; // inPos表示存入的时候数组的下标,outPos表示取出的时候数组的下标原创 2021-03-06 17:15:05 · 611 阅读 · 0 评论 -
Java 多线程-死锁的模拟
有这样一个场景:刘帅帅和李美美在一起吃饭,李美美比较爱用筷子吃饭,刘帅帅比较喜欢用勺子吃饭。但是李美美拿了刘帅帅的勺子,刘帅帅拿了李美美的筷子,然后两个人开始争论不休:刘帅帅:“你先给我勺子,我再给你筷子!”李美美:“你先给我筷子,我再给你勺子!”…结果就是两个人都没吃上饭,并且刘帅帅被李美美打了一顿。这个例子中两个人就相当于两个不同的线程,筷子和勺子就相当于锁。两个线程在运行的时候都在等待对方的锁,这样便造成了程序的停滞,这种现象称为死锁。接下来我们模拟一下死锁的问题:package com.原创 2021-03-05 16:23:02 · 602 阅读 · 0 评论 -
Java 多线程-Lock锁
Lock锁原创 2021-03-05 09:02:33 · 301 阅读 · 2 评论 -
Java 多线程同步-同步代码块&&同步方法
我们回忆一下之前的火车票案例:package com.veeja.thread;/** * @Author veeja * 2021/3/2 11:35 */public class BuyTicketThreadExtendTest { public static void main(String[] args) { BuyTicketThreadExtend t1 = new BuyTicketThreadExtend("one"); BuyTick原创 2021-03-04 12:31:19 · 1263 阅读 · 1 评论 -
Java 线程类中常用的方法
Thread 常用方法先回顾一下我们之前用过的一些方法:start():启动当前线程run():线程类继承Thread类或者实现Runnable接口的时候,都要实现这个run()方法,run()方法里面是线程要执行的内容。currentThread():Thread类中的一个静态方法:获取当前正在执行的线程。setName():设置线程名字。getName():获取线程名字。1. 设置优先级 setPriority()同优先级别的线程,采取的策略就是先到先服务,使用时间片策略。如果优原创 2021-03-03 14:45:32 · 476 阅读 · 0 评论 -
Java 线程的生命周期及状态转换
在Java中,任何对象都有其生命周期,线程也是一样。当Thread对象创建完成,线程的生命周期就开始了。当run()方法中的代码正常执行完毕或者线程抛出一个未捕获的异常(Exception)或者错误(Error)时,线程的生命周期便会结束。线程的生命周期主要可以分为五个阶段:New:新建状态Runnable:就绪状态Running:运行状态Blocked:阻塞状态Terminated:死亡状态线程的不同状态表明了线程当前正在进行的活动。线程之间的转换:1. 新建状态(New)创建原创 2021-03-03 11:08:24 · 655 阅读 · 0 评论 -
Java 创建多线程的三种方式
创建多线程的三种方式1. 继承Thread类继承Thread类,覆写run方法。使用setName()和getName()来设置和获取线程的名字。/** * 以火车票为例 */public class BuyTicketThreadExtend extends Thread { // 总票数,为了使多个实例抢的都是这10张票,所以用static修饰 static int ticketNumber = 10; // 设置线程名字的方法 public Buy原创 2021-03-02 15:50:19 · 277 阅读 · 0 评论 -
Java——类加载器
1. 什么是类加载器?类加载器就是负责把.class文件加载到JVM的方法区中,变成一个Class对象。类加载器也是一个类:ClassLoader。类加载器可以被加载到内存,是通过类加载器完成的。2. 得到类加载器怎么得到类加载器呢?很简单,使用Class#getClassLoader()。3. 类加载器的分类引导类加载器:bootstrap classloader 加载类库中的...原创 2020-03-08 10:05:00 · 187 阅读 · 0 评论 -
学习框架之前要掌握的基础——动态代理
动态代理1. 学习动态代理的目的动态代理技术都是在框架中使用,例如Struts1、Struts2、Spring和Hibernate中都使用了动态代理技术。我们学习动态代理技术,是为了更好的理解框架内部的原理,也是为了以后学习框架打下基础。2. 运行时实现指定的接口我们先回忆一下,如果要想实现一个接口,我们需要先写一个类,然后在类的后面给出“implements”XXX接口。这才是实现某个...原创 2020-03-07 17:22:20 · 286 阅读 · 0 评论 -
Java 注解
注解一、什么是注解什么是注解呢?Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。例如我们以前用到的测试一个方法的时候,就使用了@Test注解。注解的语法就是:@注解名称注解的作用就是为了替代xml配置文件,在servlet3.0中,就可以不再使用web.xml,而是所有的配置都使用注解。注解是由框架来读取使用的。例如在web.xml里...原创 2020-03-05 18:57:20 · 486 阅读 · 0 评论 -
网站中如何实现邮箱验证?使用java发送邮件?——JavaMail
JavaMail使用步骤首先我们来了解一下邮件协议。一、邮件协议1. 收发邮件我们经常使用电子邮箱进行收发邮件。发邮件其实就是把邮件发送到服务器,收邮件就是把邮件服务器的邮件下载到客户端。我们在163,126,qq,搜狐,新浪等网站注册的电子邮箱账户。其实就是在邮件服务器中注册的。这些网站都有自己的邮件服务器。2. 邮件协议与HTTP协议相同,收发邮件也是需要有传输协议的。SM...原创 2020-02-18 21:27:07 · 1543 阅读 · 0 评论 -
Java-Mysql之批处理
引言批处理就是一批一批的处理,而不是一个一个的处理。当你有10条SQL语句要执行时,一次向服务器发送一条SQL语句,这么做效率上很差!处理的方案是使用批处理,即一次向服务器发送多条SQL语句,然后由服务器一次性处理。批处理只针对更新(增、删、改)语句,不可以用于查询。我们首先要打开Mysql的批处理,添加参数:rewriteBatchedStatements=true,也就是把我们的URL...原创 2019-10-22 17:32:54 · 1810 阅读 · 0 评论 -
如何在数据库中存储大的数据文件
1. 什么是大的数据?所谓大的数据,就是大的字节数据,或大的字符数据。标准SQL中提供了如下类型来保存大数据类型:类型长度tinyblob28–1B(256B)blob216-1B(64K)mediumblob224-1B(16M)longblob232-1B(4G)tinyclob28–1B(256B)clob216-1B(64K...原创 2019-10-22 17:05:49 · 3787 阅读 · 0 评论 -
Java中的Date类与SQL中的Date类的相互转换
Java中的时间类型java.sql包下给出三个与数据库相关的日期时间类型,分别是:Date:表示日期,只有年月日,没有时分秒。会丢失时间;Time:表示时间,只有时分秒,没有年月日。会丢失日期;Timestamp:表示时间戳,有年月日时分秒,以及毫秒。这三个类都是java.util.Date的子类。数据库类型与java中类型的对应关系:DATE → java.sql.DateTI...原创 2019-10-22 15:51:25 · 5368 阅读 · 2 评论 -
Java 生成 验证码图片
如何用JAVA生成随机验证码图片原创 2019-06-24 11:04:03 · 9021 阅读 · 6 评论 -
Eclipse 快捷键
Eclipse 快捷键编辑类快捷键描述Ctrl+1快速修复(最经典的快捷键,就不用多说了,可以解决很多问题,比如import类、try catch包围等)Ctrl+Shift+F格式化当前代码Ctrl+Shift+M添加类的import导入Ctrl+Shift+O组织类的import导入(既有Ctrl+Shift+M的作用,又可以帮你去除没用的导入...原创 2019-02-15 18:38:54 · 121 阅读 · 0 评论 -
JAVA程序日志实现方法——重定向输出流
------ 在JAVA中可以通过重定向输出流来实现程序的日志功能。------ System类中的out成员变量是Java的标准输出流,程序通常用它来输出调试信息。out成员变量被定义为final类型的,所以无法直接重新赋值,但是可以通过setOut()方法来设置新的输出流。 下面的代码利用该方法实现了输出流的重定向,把它指向一个文件输出流,从而实现了日志功能。import java....原创 2019-02-17 15:43:06 · 1423 阅读 · 1 评论 -
Java 两变量交换的实现(不借助第三个变量,异或、减法)
程序中我们想实现A、B两个变量的交换,最简单能想到的就是借助第三个变量,即://我们假设A=5;B=10,进行以下操作C = A; //此时A=5,B=10,C=5A = B; //此时A=10,B=10,C=5B = C; //此时A=10,B=5,C=5//最终A=10,B=5,实现了两个变量的交换我们知道减法有一个规律,就是:如果x-y=z;那么z-y=x。我们利用这个规...原创 2019-02-17 19:29:54 · 348 阅读 · 0 评论 -
使用JDBC的基本步骤
注册驱动;建立连接;创建statement对象;执行SQL语句,得到结果集;遍历查询结果;释放资源,关闭连接。原创 2019-04-03 21:22:59 · 1085 阅读 · 0 评论 -
JDBC工具类创建
把JDBC用的一些代码进行整合复用,形成JDBC工具类。主要是资源释放工作的整合,以及驱动的防二次注册,还把建立连接的过程封装起来,并使用properties读取属性进行优化。原创 2019-04-04 11:37:10 · 485 阅读 · 0 评论 -
JDBC+MySQL之使用Junit执行单元测试
使用Junit进行单元测试的步骤:定义一个TestXXX的类,定义testXxx方法;添加Junit的支持;方法上面添加注解;执行单元测试。原创 2019-04-05 22:03:30 · 1882 阅读 · 0 评论 -
JDBC+MySQL 之 DAO模式
DAO设计模式:1. 新建一个dao的接口,里面声明数据库访问规则。2. 新建一个dao的实现类,具体实现早前定义的规则。3. 直接使用实现。原创 2019-04-06 10:40:32 · 286 阅读 · 0 评论 -
JDBC+MySQL 之 PreparedStatement
由于statement的执行,是对SQL语句的拼接。不管你在填写的时候输入了什么,它都把他看成是SQL语句的一部分,这里就存在SQL语句注入漏洞,如果你传入的字符串包括“1=1”这条恒等语句,就会发生意料之外的事情。为了解决这个问题,我们可以使用preparedStatement。原创 2019-04-06 20:53:51 · 645 阅读 · 0 评论 -
JDK5.0新特性 (一)(泛型、枚举、静态导入、自动拆装箱、增强for循环、可变参数)
包含内容: 泛型、枚举、静态导入、自动拆装箱、增强for循环、可变参数。原创 2019-05-14 21:38:22 · 244 阅读 · 0 评论 -
JDK5.0新特性 (二)反射
JDK5.0新特性,反射,反射原理,使用反射操作类的内容,类的属性,类的构造方法(分为有参数的和无参数的),类的普通方法。原创 2019-05-14 22:50:44 · 203 阅读 · 0 评论 -
Myeclipse的常用配置
MyEclipse的配置是基于工作空间的,如果更换了工作空间,我们就需要重新配置我们的MyEclipse。工作空间编码工作空间编码修改为utf-8:这样设置完成之后,以后我们在这个工作空间下新建的任何项目和文件都是utf-8编码的。jsp文件打开方式MyEclipse的默认jsp编辑器非常的吃内存,而且可能造成一些错误的发生。选中上图中的选项,点击右面的default,让它变成默认...原创 2019-05-21 20:18:45 · 392 阅读 · 0 评论 -
JDK环境变量配置详细解析
以前只知道傻傻的跟着教程配置jdk环境变量,今天看了点资料,仔细的学习了一下,明白了为什么这么配置,还学了一些花里胡哨的玩意,哈哈,总结一下。原创 2018-09-13 17:36:17 · 17995 阅读 · 1 评论