JAVA
文章平均质量分 55
王者之路001
解决问题才是王道!
展开
-
一个学习队列、生产者-消费者模式、多线程、同步的极佳的例子
3)多线程:线程是计算机中执行任务的最小单位(进程是拥有独立资源的最小单位)。线程sleep或停止会退出CPU。多线程之间会进行任务切换,这牵涉对进程的管理,以及对CPU资源的占用。4)同步:多线程之间同步,就是让任务取得一致。多线程同步,可以获得任务的一致性。多线程同步有多种机制,信号、临界区都是典型的机制。2)生产者-消费者模式:通过缓冲作为中间件,生产者发送数据,消费者读取数据;发现一个极佳的学习队列、生产者-消费者模式、多线程、同步(当然也有模板)的极佳的例子。1)队列:先进先出的表结构;原创 2023-02-20 18:38:11 · 208 阅读 · 0 评论 -
JAVA线程池的使用
线程池是另一种池化思想的运用,把线程放入池中进行管理。这种方法的好处是可以避免线程的创建、切换和销毁,因为这些过程非常耗资源。一般情况下,大厂都不建议工程师自己创建线程池,因为线程池创建很容易消耗大量内存。JAVA线程池的基本原理,其实就是对线程的生产者-消费者模型。JAVA线程池会确定核心线程数和最大线程数,来控制线程池的大小。如上图所示,右半部分是线程池的管理,而左半部分是任务的执行。JAVA线程池主要做的事情是对线程池的管理和任务的执行。其中,Task为相关线程。JAVA线程池就是这样的一种线程池。原创 2023-02-17 17:38:46 · 932 阅读 · 0 评论 -
JAVA程序发布为启动项目
然后,把文件放到C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 文件夹下。2)这种方式启动后,bat文件将运行为控制台窗口,如果关闭控制台窗口,将关闭该程序。,可以安装相关服务(在控制面板—>管理工具—>服务里查看)。注意,可以对WinSW.exe改名,但对应的XML文件必须和exe命名相同,才能保证文件被识别。JAVA程序导出为JAR包之后,做成启动项目,才可以正确运行。原创 2022-12-19 16:33:39 · 746 阅读 · 0 评论 -
JPA方言问题
JPA方言问题,是在进行JPA开发时,可能遇到的问题。主要遇到问题的场景为:JPA由于要适应不同数据库,而不同数据库表结构和数据类型存在的一定的区别,从而造成方言问题。原创 2022-10-13 15:33:49 · 1189 阅读 · 0 评论 -
SpringBoot之JPA框架下如何使用JTA——分布式事务解决方案
本篇博客的精髓,在于实现Springboot框架下的分布式事务。原创 2022-10-11 14:54:52 · 962 阅读 · 0 评论 -
SpringBoot中@AutoWired注解的静态变量
SpringBoot中@AutoWired注解的静态变量原创 2022-08-22 19:03:13 · 1011 阅读 · 0 评论 -
JPA之EntityManager两种group方法
一种方法是采用原生的SQL语句。但使用此种方法需要注意如下问题:就是当被选择项(select的项目)本身不在group里,且没有聚合函数时,会产生错误。另一种方法是使用Stream功能进行group。值得注意的是,Stream的group分组后,会生成一个Map。可以在Map里进行统计和执行操作。JPA对group的支持,其实并不太好。笔者选择了两种方法进行操作。...原创 2022-08-18 09:42:36 · 738 阅读 · 0 评论 -
EntityManagerFactory和EntityManager的一个用法探究
EntityManager是具体的操作增删改查,但EntityManagerFactory才定义了持久化存储单元的环境原创 2022-07-20 17:32:05 · 1095 阅读 · 0 评论 -
IDEA导出Springboot包(附加本地库)
IDEA导出Springboot库原创 2022-07-19 11:23:10 · 1342 阅读 · 0 评论 -
JAVA Stream原理和常见操作
1.Stream原理Stream是JAVA8开始的新的用法。Stream本意为流,Stream也确实如流一样,给操作带来了方便。Stream的表现是:1)提供一个特定类型的队列;2)提供一系列操作,让队列拥有类似于SQL语句的操作。Stream的原理或背后的基本支持是ForkJoinPool。ForkJoinPool主要用来使用分治法(Divide-and-Conquer Algorithm) 来解决问题,即把多个大任务分割为多个小型子任务。但该任务的缺点是:如果子任务没有完成,整个总任务也没法进行完成和归原创 2022-06-22 11:40:21 · 1986 阅读 · 0 评论 -
SpringBoot解决跨域问题
Springboot解决跨域问题原创 2022-06-20 09:52:36 · 814 阅读 · 0 评论 -
Caused by: java.lang.ClassNotFoundException: yaml.config.sharding.YamlShardingRuleConfiguration
今天,碰到一个异常,“Caused by: java.lang.ClassNotFoundException: org.apache.shardingsphere.core.yaml.config.sharding.YamlShardingRuleConfiguration”。找相关错误,Stack Overflow上给的错误解释,说是配置文件错误。并认为原因为原配置文件为“spring.shardingsphere.datasource.ds0.url” 应该改为“spring.shardingsph原创 2022-05-30 17:33:07 · 1110 阅读 · 0 评论 -
Hibernate Connection Pool Validation Thread java.lang.OutOfMemoryError
近日,用Springboot做了一个网络服务器,原理很简单,网络访问以后,用数据库存储访问。代码如下:@RestController@RequestMapping("/test")public class ThirdParkController { private EntityManagerFactory mFactory = null; private EntityManager mEm = null; // <summary> /// 车辆入场原创 2022-05-07 18:27:25 · 642 阅读 · 0 评论 -
Caused by: java.lang.NoSuchMethodException: org.springframework.boot.context.config.ConfigDataEnviro
本文的题目其实应该是“Caused by: java.lang.NoSuchMethodException: org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.<init>()”和“Exception in thread "main" java.lang.IllegalArgumentException: Cannot instantiate interface org.springframewo原创 2022-05-05 16:43:59 · 4722 阅读 · 2 评论 -
CountDownLatch的用法
今日试图解决一个问题,就是在Android中实现多线程同步,但要求几个变量同时同步。当时,首先想的是,一定得用Android或JAVA的本身机制。发现有个叫CountDownLatch的机制。CountDownLatch多线程同步类,可以协调多个线程之间的同步。CountDownLatch的典型用法如下:1)创建一个CountDownLatch实例,并确定需要等待的线程或任务数;2)一个线程或任务完成,CountDownLatch计数器减一;3)使用CountDownLatch.原创 2022-02-10 16:24:34 · 1697 阅读 · 0 评论 -
Android中getActivity()为null
通过bugly,追踪到一个崩溃,发现问题为在Fragment里getActivity()为null后崩溃。于是,深层次找原因。发现根本原因为:JVM在内存不足的情况下,会把Activity回收;而Frament和Activity的声明周期不一致,此时Frament不一定会被回收;因此,才导致getActivity()为null的问题。Activity生命周期如下:Fragment的生命周期如下:因此,可以用的解决方法是:对Activity添加引用,保证Acitivit原创 2022-02-08 14:36:05 · 1774 阅读 · 0 评论 -
Unable to build Hibernate SessionFactory和Caused by: org.hibernate.tool.schema.spi.SchemaManagementEx
近日,在使用Hibernate的时候,发现如下问题,即发现Hibernate出现如下问题,先出现如下Unable to build Hibernate SessionFactory错误,后出现Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [idarea] in table [areaobject]; f原创 2021-12-06 14:25:23 · 1462 阅读 · 0 评论 -
EntityManager使用原生查询createNativeQuery并把值映射到自定义实体
最近一直在用JPA,使用了EntityManager作为基本查询方法。EntityManager可以满足基本的增删改查,但实际上很多时候,是必须采用原生查询的。而且,原生查询的返回值必须和自定义实体相配。当自定义实体对应原生查询的返回值的时候,一般有2种方法。1)自定义实体类,可以直接运用createNativeQuery的方法。接口定义如下:public Query createNativeQuery(String sqlString, Class resultClass)class原创 2021-11-25 10:09:15 · 10070 阅读 · 0 评论 -
EntityManagerFactory单例、EntiyManager与连接池
最近在项目中使用JPA,用到了EntityManager,想用EntityManager的单例。然后,发现一个问题,EntityManager可以用单例,但EntityManager使用时都会使用上下文,即会进行操作。当多个进程使用一个EntityManager时,会造成程序使用错误,如空指针错误等异常。同时,EntityManager并非线程安全的;因此,EntityManager无法用单例。可以用的单例是EntityManagerFactory,EntityManagerFactory本身为原创 2021-11-22 15:21:02 · 1230 阅读 · 0 评论 -
解决使用导出不同库的实体重名不符合JPA规范问题
一.导出库对应实体使用JPA,需要导出数据库对应实体,这样才可以在JPA中使用。JPA是Hibernate的目前标准,可以用于不同数据库,并可以让工程师脱离数据的实际结构,更专心于业务。二.导出过程:用Eclipse可以用IDEA导出JPA实体,但用IDEA导出实体会有shema和数据库标识符,故选择Eclipse作为导出工具。导出实体方法如下:创建JAVA项目,同时确保Eclipse里装上了JPA工具; 右键JAVA项目,选择Propeties。 选择JPA工具。...原创 2021-11-16 13:54:49 · 1066 阅读 · 0 评论 -
由一段语句没有return论述try-catch语句中的return
最近在写一个判定程序,发现程序运行有异常,于是,就提供了一个try-catch捕捉异常。同时,发现该程序里return失效了。当时就发生了我乍一看非常诡异的现象:一个if判定语句里的return,不运行了。我当时很诧异,以为是编译器坏了,甚至以为是缓存没有清理,还多次rebuild和清理缓存。最后,认真想了下,应该是try-catch语句的问题。果然查到如下资料:[1]【java】try-catch-finally语句中return的执行顺序思考 | iTimeTraveler[2]原创 2021-10-15 10:52:10 · 145 阅读 · 0 评论 -
Android在另一个类中获得Http消息
近日试图用Android发送Http消息,于是用到了Android中Http库,试用的库为OKHttp库。试用以后发现该库存在如下问题:1)Android中已经不支持同步获得HTTP方式;2)只能用异步中获得Http消息,目前主流的OKHttp接口方法为:在OKHttp中调用匿名回调函数,然后获得Http相应。如下所示://1.创建OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient.Builder()原创 2021-08-17 09:53:20 · 161 阅读 · 0 评论 -
Android Handler
1.什么是Handler Handler是一个消息分发对象。Handler是android中提供的消息处理机制,主要用于更新UI。 Handler本质是一个消息队列,用于消息的收发。2.Handler的作用 Handler其实是消息收发没有什么本质区别;Handler机制提出是因为:1)在Android中,UI操作只能在主线程中来完成,子线程的相应操作必须让主线程来完成;2)但如果主线程对UI操作没有顺序,则会造成界面混乱;3)而采用加锁方式,则会造成界面卡死;...原创 2021-08-11 09:35:55 · 105 阅读 · 0 评论 -
android上java.util.ConcurrentModificationException错误解决
今天在运行Android代码,发现程序崩溃了,发现错误为“java.util.ConcurrentModificationException ”,错误栈在list里面。然后,看异常变量,为list本身错误。笔者马上想起来了,list和vector 的区别:1)list是非线程安全的,vector是线程安全的。2)这造成list本身比vector操作更快,但也更不安全。马上想到用vector替换list。然后,发现还是有问题,提示如下:java.util.ConcurrentMod原创 2021-07-08 10:25:55 · 1917 阅读 · 0 评论 -
android设置出错以后对话框提示并返回上一级
今天遇到了如下问题,在Android中,部分从后台中获得的数据会出错,需要给用户一个提示。我的思路是:提供一个出错后提醒的对话框,然后,让用户点击后返回上一个界面。整个程序如下:public class ClassThis extends BaseActivity {public void showDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); //设置标题原创 2021-05-19 14:04:53 · 302 阅读 · 2 评论 -
Android10.0上传照片卡死
今日在测同事写的Android程序APP,发现APP在本人的手机上使用拍照出问题了:点击拍照,直接卡死。笔者手机由于手贱,进行升级,现在版本是Andoid10.0。于是,用Android Studio进行调试;笔者以前也学过Android,但其实对Android属于半通不通状态。因此,笔者决定把所有定位过程写一下,正好给懂研发,但不懂新项目的人提供一些解决问题的思路。首先,决定先找到业务入口。查询到相关业务的关键字符以后,在整个程序中,搜关键字符,并在可能的部分打下断点。然后,进行调试。笔者原创 2021-04-12 18:58:13 · 418 阅读 · 0 评论 -
Hibernate - ClassNotFoundException: com.mysql.jdbc.Driver
发现是缺失MySQL的连接库,把MySQL的连接库mysql-connector-java-8.0.19.jar加入到程序目录即成功原创 2021-04-07 09:52:01 · 84 阅读 · 0 评论 -
AOP编程
1.AOP编程概述AOP编程,英文原意是Aspect Oriented Programming,即面向切面编程。AOP是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承和多态等概念定义了对象层级结构,对外提供公共行为,提供一个公共行为的集合;OOP非常适合纵向编程。但OOP不适合横向编程,比如一些功能分布广泛,且具有功能复用的模块。AOP则提供了一个名叫“横切”的技术,把影响多个类的公共行为封装到一个可重用的模块,并将其命名为“原创 2021-03-29 10:36:58 · 422 阅读 · 0 评论 -
Nacos启动报 Error starting Tomcat context
今天试图搭建Nacos框架。Nacos在Github上,下载很慢,一直下载失败。终于下载好了,发现启动失败。报这样的错误Error starting Tomcat context. Exception: org.springframework.beans.factory.BeanCreationException最后发现是由于启动模式出错造成的,把startup.cmd的26行改为单机模式即成功。set MODE="standalone"set FUNCTION_MODE="all"set原创 2021-03-10 18:40:43 · 10573 阅读 · 8 评论 -
Docker部署和运行JAVA服务
1.Docker的安装 Docker是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。 Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视...原创 2021-03-03 16:42:12 · 1357 阅读 · 2 评论 -
JAVA常用数据库连接池
1.连接池 池化思想是在计算机软件研发中常用的一种思想;该思想为建立一组序列,用于存放各种数据结构,从而对各种数据结构进行管理。池化的优点为:让数据结构有序化和处于控制,从而方便管理。池化本质是一种数学思想,常见的数学池如:整数池、小数池、有理数池、负数池。而在计算机工程中常见的池为:连接池、内存池、线程池。 连接池是一种思想和技术:把整个数据库连接放入池内;当访问数据库时,如果连接存在,则直接采用原来的数据库连接;同时,新连接会存在连接池内,方便服用。 连...原创 2021-02-24 09:36:01 · 2061 阅读 · 1 评论 -
springboot+MyBatis 操作SQLServer提供暴露所有接口的说明
1.springboot简介 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。 springboot有四个核心: ...原创 2021-02-07 10:55:14 · 763 阅读 · 0 评论 -
JAVA中一个类的main函数调用另一个类的main函数
在JAVA中,同一个项目中,是允许多个类的存在main函数的。其实,想一想就明白了,JAVA是真正的面向对象语言;所有程序的运行,都基于类;而每一个类,都应该是完整的。main函数为static函数,在JAVA里,static函数可以直接使用类类型进行调用,也可以实例化一个对象进行调用。也就是说,在JAVA里,可以直接调用另一个类的main函数。当然,需要做的事情是,在运行的时候,需要给JVM指定特定的主类运行。如下图所示(Eclipse中):代码如下:class Supe原创 2020-11-24 15:52:43 · 17384 阅读 · 7 评论 -
JAVA容器之List
1.JAVA容器 容器,是指一系列数据结构和算法的集合;在容器内部,提供了范型的数据结构和算法,从而为让不同数据类型的同一算法得以实现。在具体的算法实现的时候,是需要考虑不同数据结构的影响的,因为不同的数据结构会影响同一算法的时间复杂度和空间复杂度;但容器的最终目的是提供算法接口,而让软件工程师只用了解算法的实现,而不需要再重复造轮子而实现算法。从工程性的角度来说,容器的作用非常...原创 2019-09-21 23:28:28 · 139 阅读 · 0 评论 -
Exception in thread "main" java.lang.NoClassDefFoundError 神奇解决
我对JAVA不是特别熟悉,今天,在执行JAR包程序,发现这样的错误。Exception in thread "main" java.lang.NoClassDefFoundError于是,试图解决,然后,搜相应文章。发现文章如下。1参考文献文献1:http://topic.csdn.net/u/20070812/16/b24350b6-3db4-4f7e-9861...原创 2017-09-13 17:31:17 · 7748 阅读 · 0 评论