原创 JAVA線程併發性之CAS算法,模擬實現代碼

在瞭解算法之前,我們先對回顧基本概念: 原子性:具有不可分割性。比如 a=0;(a非long和double類型) 這個操作是不可分割的,那麼我們說這個操作時原子操作。再比如:a++; 這個操作實際是a = a + 1;是可分割的,

原创 使用Socket同一網絡內文件傳輸

Server package com.xiaoqiang.filetransfer; import java.io.BufferedInputStream; import java.io.DataInputStream; imp

原创 JAVA虛擬機規範讀書筆記--class文件結構及數據類型

1. class文件 文件格式 .class 文件是代碼通過虛擬機編譯後產生的一種不依賴與平臺以及硬件的二進制文件。 2. 數據類型 java虛擬機操作的數據類型分爲兩類,原始數據類型和引用類型。 原始數據: byte:8位有

原创 JAVA集合類基礎特性

Set集合 (1)Set集合的特點 無序,唯一 (2)HashSet集合(掌握) A:底層數據結構是哈希表(是一個元素爲鏈表的數組) B:哈希表底層依賴兩個

原创 JAVA虛擬機規範讀書筆記--棧,堆,方法區(內存分配)

JAVA虛擬機運行時內存分配 PC寄存器 JAVA棧 JAVA堆 方法區 運行常量池 本地方法棧 PC寄存器 每一條java虛擬機線程都有自己的pc寄存器,任意時刻java虛擬機只會執行一個方法的代碼,若該方法不是native

原创 史上最清晰易懂的JAVA深克隆和淺克隆講解

深入淺出瞭解面向對象的深克隆和淺克隆 閱讀本文需要一定的面向對象基礎和JavaIO流的相應知識! 深克隆(要實現深克隆被克隆類以及被克隆類的引用必須實現Serializable接口) (未實現接口會拋出NotSerializabl

原创 BeanUtils使用及其方法分析

BeanUtils被廣泛的使用與三大框架。 主要解決的問題是:把對象的屬性數據封裝到對象中。該工具提供字符式操作爲對象屬性提供封裝。 BeanUtils底層使用反射機制實現數據訪問及封裝 使用前的準備工作 將commons-be

原创 synchronized 和 lock 基本使用以及死鎖分析

1.未加鎖 多線程程序未加鎖可能產生安全問題 線程未加鎖可能造成數據重複訪問 如下程序 public class SellTickets implements Runnable{ private int ticketN

原创 類加載過程和反射機制使用詳解

1.類的加載 當程序要使用某個類時,如果該類還未被加載到內存中,則系統會通過加載,連接,初始化三步來實現對這個類進行初始化。 加載 就是指將class文件讀入內存,併爲之創建一個Class對象。 任何類被使用時系統都會建立一個C

原创 MacOS idea 更新後 2019.03 無法啓動

因修改idea.properties導致文件找不到 idea 2019.3版本手動修改idea.properties失效,需要進入idea,點擊Configure–>Edit VM Options 若無法打開idea,則進入id

原创 JAVA GUI 登錄註冊(連接數據庫 oracle)

本案例聽過圖形用戶界面GUI連接oracle數據庫,對數據庫進行添加,查詢。 源代碼如下 註冊界面 部分事件添加代碼採用JAVA8的 Lambda 部分事件添加代碼採用JAVA8的 Lambda —— Lambda詳

原创 模擬PPT 實現播放圖片

代碼如下 package com.xiaoqiang; import java.awt.Component; import java.awt.Container; import java.awt.Graphics; impor

原创 java.lang.NoClassDefFoundError org/apache/commons/collections/FastHashMap

Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMap 是因爲Java虛擬機在編譯時能找到合適的類,而在運行時

原创 JAVA 8 新時間 API java.time 使用簡介

JAVA 8 引入新時間API原因是原來的Date類無法支持多線程操作,新時間API支持多線程操作,當java.time包內時間類其值發生改變時,其如同String類,類的實例是不可變的對象,當改變其值的時候就會新生成對象地址,從

原创 java nio 新的四種文件傳輸 直接緩衝與非直接緩衝 速度對比

直接緩衝區與非直接緩衝區: 非直接緩衝區:通過 allocate() 方法分配緩衝區,將緩衝區建立在JVM 內存 中 直接緩衝區:通過 allocateDirect() 方法或其他方法分配緩衝區,將緩衝區建立在物理內存中。可以提