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

原创 java线程死锁问题
java线程死锁问题 演示线程死锁问题: 同一类中 public class ThreadTest { public static void main(String[] args) { StringBuffer s1 = new StringBuffer(); StringBuffer s2 = new StringBuffer(); new Thread() { @Override public void run() { synchronized(s1) {
2020-11-24 19:27:03
291
3

原创 java线程安全问题及其解决
java线程安全问题 出现原因:多个线程之间存在“共享数据”(即共同操作的变量,“ticket”) 车站卖票案例: 定义窗口1类实现Runnable接口 class Window1 implements Runnable{ private int ticket = 100; @override public void run(){ while(true){ if(ticket > 0 ){ //为了让线程安全问题更明显(错票) try{ Thread.sle
2020-11-24 18:33:51
171
3
转载 克隆Linux虚拟机,Linux机器SSH互联,Linux机器生成密钥与设置
原创如下: https://blog.51cto.com/shuzonglu/2050738
2021-11-04 22:44:38
173
原创 Spring5-IOC
Spring5-IOC IOC概念: IOC过程: IOC接口 @Test public void testAdd() { //1.加载spring配置文件 //BeanFactory context = new ClassPathXmlApplicationContext(configLocation:"bean1.xml"); ApplicationContext context = new ClassPathXmlApplicationContext(configLocation:"bea
2020-12-03 22:11:02
161
原创 java集合
java集合 集合、数组都是对多个数据存取的操作,简称java容器 此时的存储,主要指内存层面,不涉及持久化的存储 数组: java集合 Collection继承树结构(虚线实现类,实现子接口) Map继承树结构 Collection类 代码演示:** @Test public void test1() { Collection coll = new ArrayList(); //add(E e):添加元素 coll.add("AA"); coll.add(123); //自动
2020-11-27 22:00:36
216
原创 java常用类-Comparable,Comparator
java常用类-Comparable,Comparator 说明:Java中对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 <, 但在开发中,需要对多个对象进行排序,言外之意,需要比较对象的大小。 如何实现?使用两个接口中的任何一个:Comparable 或 Comparator 一,Comparable接口的使用: 自定义类演示: 商品类(Goods.java) public class Goods implements Comparable { private
2020-11-27 16:25:09
210
1
原创 java常用类-日期
java常用类-日期 代码演示: @Test public void test2() { //构造器一:Date():创建一个对应当前时间的Date对象 Date date1 = new Date(); System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019 System.out.println(date1.getTime()); //1550306204104 //构造器二:创建指定毫秒数的Dat
2020-11-26 22:03:31
199
原创 java常用类-StringBuffer,StringBuilder
StringBuffer,StringBuilder篇 String, StringBuffer, StringBuilder三者的异同: String:不可变字符序列;底层用char[ ]存储 StringBuffer:可变的字符序列;线程安全,效率低 StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全,效率高 StringBuffer源码: 底层使用可变char[ ]数组 synchronized线程同步 StringBuilder源码: 底层使用可变char[ ]数组
2020-11-26 16:46:21
139
原创 Java常用类-String
Java常用类 String篇 代码演示: public class StringTest { @Test public void test2() { //通过字面量定义的方式:此时的s1和s2的数据JavaEE声明在方法区中的字符串常量池中 String s1 = "JavaEE"; String s2 = "JavaEE"; //通过new + 构造器的方式:此时的s3和s4保存的地址值,是数据在堆空间中开辟空间以后对应的地址值 String s3 = new Stri
2020-11-26 15:46:38
237
2
原创 单例设计模式
单例设计模式 什么是单例设计模式? 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。 实现一:立即加载 / “饿汉模式” 立即加载就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故又被称为“饿汉模式”),常见的实现办法就是直接new实例化。 class Bank { private Bank(){} private static
2020-11-26 12:36:12
151
2
原创 Thread类的常用方法
Thread类的常用方法 1.start():启动当前线程,调用当前线程的run() 2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中 3.currentThread():静态方法,返回执行当前代码的线程 4.getName():获取当前线程的名字 5.setName():设置当前线程的名字 6.yield():释放当前cpu的执行权 7.join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态。
2020-11-26 11:31:44
268
原创 线程的创建方式
线程的创建方式 方式一:继承Thread类 方式二:实现Runnable接口 方式三:实现Callable接口 --JDK5.0新增 代码演示: //1.创建一个实现Callable的实现类 class NumThread implements Callable { //2.实现call方法,将此线程需要执行的操作声明在call()中 @override public Object call() throws Exception { int sum = 0; for (int i = 1;
2020-11-25 19:56:21
103
原创 线程通信问题
线程通信问题 分析: 1.是否是多线程?是,生产者线程,消费者线程 2.是否有共享数据?是,店员(或产品) 3.如何解决线程安全问题?同步机制,三种方法 4.是否涉及线程的通信?是 代码如下: class Clerk { private int productCount = 0; //生产产品 public synchronized void produceProduct() { if(productCount < 20) { productCount++; Syste
2020-11-25 17:41:48
86
原创 Java中sleep()与wait()的异同:
Java中sleep()与wait()的异同: wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器 notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个线程 notifyAll():一旦执行此方法,就会唤醒所以被wait的线程 说明: 1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。 2.wait(),notify(),notifyAll()三个方法的调用者必须是同步代码块
2020-11-25 17:04:29
176
原创 java中线程de生命周期
java中线程的生命周期 一个完整的线程要经历5个状态: 1)新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态 2)就绪: 处于新建状态的线程被start()后,将进入线程队列等待CUP时间片,此时它已具备了运行的条件,只是没分配到CPU的资源 3)运行: 当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线程的操作和功能 4)阻塞: 在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入阻塞状态 5
2020-11-24 16:57:21
98
原创 java中多态是编译行为还是运行行为
java中多态是编译行为还是运行行为 代码如下: 结果如下: 由此可见,编译期不知道运行结果,所以多态为运行期行为
2020-11-20 11:46:01
199
原创 Java 为什么占两个字节的char
Java 为什么占两个字节的char Java语言内部存储采用的是Unicode编码,Unicode编码中的每个字符占两个字节,中文也是占两个字节,所以,Java中的字符可以存储一个中文汉字。 1、而在不同的编码方式中,中文所占的字节数是不同的: ① ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。 ② UTF-8编码中,一个英文字符等于一个字节,一个中文(
2020-11-19 11:24:55
3014
转载 关于${pageContext.request.contextPath}的理解
关于${pageContext.request.contextPath}的理解 {pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> 。 也就是取出部署的应用程序名或者是当前的项目名称 比如我的项目名称是demo1在浏览器中输入为http://localhost:8080/demo1/a.jsp ${pageContext.request.contextPath}或<%=request
2020-11-18 15:08:37
1515
原创 Mybatis入门
Mybatis入门: 创建一个Test类 public static void main(String[] args) throws Exception{ //1.读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); S
2020-11-15 14:02:41
51
原创 Mybatis环境搭建
Mybatis环境搭建 三层架构 Mybatis的入门: Mybatis的环境搭建 第一步:创建maven工程并导入坐标 第二步:创建实体类和dao的接口 第三步:创建Mybatis的主配置文件 第四步:创建映射配置文件 Mybatis的映射配置文件位置必须和dao接口的包结构相同 Maven导入: <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artif
2020-11-15 13:38:14
131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人