自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 RedisTemplate的说明与使用

RedisTemplate方式是SpringBoot集成Redis的客户端方式,在使用时与Jedis的区别是是否使用Spring的Ioc在使用RedisTemplage的时候一定要配置对象的序列化和反序列化方式。推荐是使用StringRedisSerializer来序列化的处理。RedisTemplate的方法与Jedis不同,没有Jedis浅显易懂。 感兴趣的同学可以来我的git里获取相应代码码云(https://gitee.com/caoyuqinb/redis-template-usage).

2022-04-04 17:42:18 1122

原创 MyBatis实现增删改查

这里一定要注意的是:增删改都需要提交事务才可以生效import com.caoyuqi.dao.UserDao;import com.caoyuqi.model.User;import com.caoyuqi.utils.MybatisUtils;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.util.List;public class UserTest { @Test

2021-11-29 17:24:36 348

原创 第一个MyBatis程序

环境的搭建我们使用IDEA创建一个maven项目,在pom.xml中书写以下配置文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.o

2021-11-29 16:17:57 713

原创 ByteBuffer常用API

代码演示package com.chat;import java.nio.ByteBuffer;public class ByteBufferDemo { public static void main(String[] args) { System.out.println("------初始化Buffer------"); ByteBuffer bb = ByteBuffer.allocate(10); System.out.println

2021-11-25 17:57:05 359

原创 Java NIO

Java NIO基本介绍Java NIO 是java1.4版本引入的新的IOAPI,可以替代标准的java IO API .NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的,基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。NIO可以理解为非阻塞IO,传统的IO的read和write只能阻塞执行,线程在读写IO期间不能干其他事情,比如调用socket.read()时,如果一直没有数据传过来,线程就会一直阻塞,而NIO可以配置socket为非阻塞模式。N

2021-11-25 17:08:31 339

原创 BIO模式下的端口转发

Server端package com.chat;import jdk.jfr.internal.tool.Main;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;public class Server { public static ArrayList<Socket> sockets = new Arra

2021-11-25 16:18:08 745

原创 Java BIO实现任意类型文件上传

Client端实现package com.picture;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.IOException;import java.net.Socket;public class Client { public static void main(String[] args) { try { Socket socket

2021-11-25 15:30:21 180

原创 伪异步I/O编程

Server类package com.ThreadPool;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) { try { try (ServerSocket ss = new ServerSocket(8888))

2021-11-25 14:10:16 66

原创 Java BIO

Java BIO图解同步阻塞案例package com.design;import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) { System.out.println("服务器已启动"); try { ServerSocket

2021-11-25 11:25:25 227

原创 Java BIO NIO AIO

Java BIOBIO(同步并阻塞)为最早的IO模型,服务器连接模式为一个连接一个线程。即客户端有连接服务端就要启动一个线程,如果不做任何事就会造成不必要的内存开销。Java NIONIO(同步非阻塞),其服务器连接模式为一个线程处理多个请求(连接)。即客户端发送的连接请求都会注册到多路复用器上多路复用器轮询到有I/0请求就进行处理。Java AIOJava AIO异步非阻塞,服务器模式为一个有效请求一个线程,其模式为客户端的I/O先由OS完成了再通知服务器进行处理,一般适用于连接较多且连接时

2021-11-25 10:05:19 98

原创 Collections方法

Collection与Collections的区别Collection是一个接口,他封装了各种集合框架Collections是一个实现类,他实现了对Collection集合的各种操作排序,翻转,随机顺序,二分查找package com.design;import java.util.ArrayList;import java.util.Collections;public class CollectionsDemo { public static void main(Strin

2021-11-24 11:57:21 205

原创 Map集合体系及HashMap源码分析

Map集合Map体系结构Map特点map集合用来存储key-value"键值对"键(key)的值无序不可重复值(value)的值无序可重复标题

2021-11-24 11:22:38 87

原创 TreeSet详解

TreeSet的特点TreeSet为Collection集合框架体系下的Set接口下的SortedSet接口的一种实现。其实现元素不重复的方法是红黑树。其存储元素必须实现Compable接口TreeSet的使用package com.design;import java.util.TreeSet;public class TreeSetDemo { public static void main(String[] args) { TreeSet<People&

2021-11-24 10:03:10 874

原创 HashSet的特点及实现原理

Set集合概述Set集合的特点是无序,无下标,不重复Set集合的所有方法都来自于其父接口Collection接口,换言之,其不存在特有的方法HashSet(重中之重)基于HashCode实现集合不重复哈希值相同时会调用equals方法判断,若为true则不插入package com.design;import java.util.HashSet;public class HashSetDemo { public static void main(String[] args

2021-11-22 16:23:58 1115

原创 Java集合框架详解

集合框架的特征集合框架均来自于包 Java.util.*集合与数组的区别是数组可以存储基本数据类型与引用数据类型,而集合只可以存储引用数据类型集合框架的体系List接口以及其子类的特点为有序有下标元素可重复Set接口以及其子类的特点为无序无下标元素不可重复Collection公共方法Java不提供任何Collection的直接子类实现,但所有继承实现Collection的接口或方法均实现以下方法。boolean add(Object obj)//添加一个对象bo

2021-11-22 11:18:52 532

原创 生产者消费者案例

场景介绍现有一个肯德基餐厅,厨师负责生产出汉堡,顾客想要吃掉汉堡。有固定的五个仓位,每个仓位可以放置一个汉堡。当仓位满了之后厨师无法继续烹饪汉堡,只能等待顾客用膳。当仓位中都没有汉堡的情况下,顾客无汉堡可吃,只能等待厨师烹饪以上场景便是经典的生产者消费者案例,在《计算机操作系统》这门课中会有所涉及,该场景涉及线程的同步问题。图解代码实现package com.design;public class TestDemo { public static void main(Str

2021-11-22 10:40:28 561

原创 Lock锁

Lock锁的引入Lock锁引入自java.util.concurrent.locks.ReentrantLockjava.util.concurrent简称juc包下如果要实现线程同步,可以用三种方式来实现,其性能排行为Lock锁>synchronized代码块>synchronized方法LockDemopackage com.design;import java.util.concurrent.locks.ReentrantLock;public class LockDe

2021-11-22 09:34:55 350

原创 DeadLock死锁问题

死锁是什么?Java中死锁是多个线程互相持有对方需求的锁却又不肯释放掉自己锁持有的锁。所造成的程序暂停。就如同两个人分别拿枪指着对方的脑袋,并要求对方先放下枪,自己才肯放下枪,如果没有一个人做出让步,则僵持不下的状态会一直持续下去。死锁Demopackage com.design;public class DeadLockDemo extends Thread { public static void main(String[] args) { Children ming

2021-11-22 09:00:07 277

原创 synchronized

synchronized修饰方法在前面的博客中我向大家展示了线程不安全的案例以及可能造成的危害,今天给大家讲解防止危险的方法。我们可以使用synchronized关键字来修饰变量或方法修饰方法之后,方法体中的this指针所指对象会被标记为同步对象。此时其他对象访问该对象会进入阻塞状态,只有对象被访问结束才会释放资源。显而易见的是这种行为无疑会消耗更多的资源,并降低程序的执行效率。package com.UnSafeDemo;public class sellTickets extends Th

2021-11-22 00:24:50 119

原创 线程不安全案例

案例一:自动售票机package com.UnSafeDemo;public class sellTickets extends Thread{ @Override public void run() { sell(); } private int tickets = 3; public static void main(String[] args) { sellTickets machine = new sellTicket

2021-11-21 20:29:04 723

原创 Daemon_守护线程

守护线程的特点线程分为用户线程和守护线程程序必须等待用户线程结束程序无需等待守护线程结束典型的守护线程有,后台操纵日志,监控内存,GC垃圾回收守护线程的Demo展示public class DaemonDemo { public static void main(String[] args) { Thread thread1 = new Thread(new People()); Thread thread2 = new Thread(new God(

2021-11-21 19:16:57 491

原创 线程的优先级

阅读Thread源码阅读Thread的源码我们可以发现 public final static int MIN_PRIORITY = 1; /** * The default priority that is assigned to a thread. */ public final static int NORM_PRIORITY = 5; /** * The maximum priority that a thread can have.

2021-11-20 15:21:46 650

原创 线程状态的观察方式

Thread的六中状态Thread类下有一个枚举enum类型的变量State,共有六个值 public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }NEW对应创建状态。RUNNABLE对应就绪状态

2021-11-20 14:31:22 402 1

原创 线程强制执行_join

join可被理解成线程的插队join是Thread的静态方法,调用后可将线程强制执行,且只有在该线程执行完毕之后其他线程才可继续调用join方法有可能会抛出异常应给予try-catch环绕package com.design;public class JoinDemo implements Runnable{ @Override public void run() { System.out.println("vip开始插队"); for (int

2021-11-20 13:54:09 133

原创 Java线程礼让_yield

线程礼让_yield的本质礼让的本质就是让线程从运行状态重新编程就绪状态调用yield之后是否能礼让成功有时要看CPU心情,因为一旦进入就绪状态很可能又立刻进入运行状态线程礼让_yield的案例package com.design;public class yielddemo implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().g

2021-11-20 12:07:12 173

原创 Java线程的休眠

Java线程的休眠线程的休眠使用的是Thread类的静态方法sleep可以传入一个参数,参数为休眠的毫秒数。1秒等于1000ms调用sleep方法时可能会出现InterruptedException异常使用线程的休眠来模拟实现时钟功能package com.design;import java.text.SimpleDateFormat;import java.util.Date;public class clock { public static void main(

2021-11-20 11:49:39 2243

原创 Java线程停止

线程的状态分为五种新生状态就绪状态运行状态阻塞状态死亡状态Java中线程状态的解释在Java中,当一个线程被new关键字所创建,就进入了新生状态。当该线程被start()方法调用,则进入就绪状态,但并不意味着线程的立刻执行。当线程进入运行状态,才开始执行run方法体中的代码。当调用线程的sleep,wait,或同步锁定时,便进入阻塞状态,代码将不会继续进行。当阻塞解除事件发生时,将进入就绪状态。线程死亡则进入死亡状态,一旦进入死亡状态则不能继续启动线程。这里要重点说明的是线程的

2021-11-20 11:30:38 143

原创 Java中的Lamda表达式

Java中Lamda表达式的使用之所以使用Lamda表达式是为了让我们的代码变得更加整洁,可读性更强,可以去掉一些无意义的名称定义。使用Lamda表达式的条件如果要使用Lamda表达式,一定要有一个接口,且接口只有一个抽象方法。方式一:传统的类实现接口方法package com.design;public class LamdaDemo1 { public static void main(String[] args) { LamdatInterfaceImpl la

2021-11-20 10:52:50 146

原创 静态代理模式(proxystatic)

静态代理模式(proxystatic)静态代理模式是设计模式的一种。步骤一,先新建相应的接口(interface)public interface eatlunch { void eat();}这里构建了一个名为吃午饭的接口,里面有一个方法为吃(eat)步骤二,实现(implements)这个接口并实现相应的方法public class eatlunchimpl implements eatlunch{ @Override public void eat() {

2021-11-20 09:59:23 387

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除