最近的开发过程中遇到了,按照bean类中的多个字段进行排序的情况,借此机会把相关的排序做法,简单整理备份一下. 1.list的单纯排序 2.list元素为bean的情况,按照bean的某一个属性进行排序 3.list元素为bean的情况,按照bean的多个属性进行排序 import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; im…
java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Runnable接口来实现java多线程, 都得不到线程执行后的结果. 要想得到线程执行后的结果,就需要使用ExecutorService, Callable, Future来实现java多线程. 可返回值的任务必须实现Callable接口, 类似的, 无返回值的任务必须实现Runnable接口. 执行…
java多线程的几种实现方式 1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通过Callable和FutureTask创建线程4.通过线程池创建线程  (上一篇已经讲过了) 前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果 后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方法,这个…
Java 代理模式有如下几种实现方式: 1.静态代理. 2.JDK动态代理. 3.CGLIB动态代理. 示例,有一个打招呼的接口.分别有两个实现,说hello,和握手.代码如下. 接口: public interface Greeting { public void doGreet(); } 实现类: public class SayHello implements Greeting { @Override public void doGreet() { System.out.println("…
JAVA实现定时任务的几种方式 @(JAVA)[spring|quartz|定时器]  近期项目开发中需要动态的添加定时任务,比如在某个活动结束时,自动生成获奖名单,导出excel等,此类任务由于活动时间是动态的,不能把定时任务配置在配置文件或写死在代码中.当然也可以增加一个定时扫描的任务来实现.借此机会整理了AVA实现定时任务的几种常用方式,以下做简要介绍. 目前主要有以下几种实现方式: - JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorSer…
Java总共有两种方式实现多线程 方式1:通过继承Thread类的方式 package com.day04; /** * 通过继承Thread类并复写run方法来是实现多线程 * * @author Administrator * */ public class ThreadDemo1 extends Thread { @Override public void run() { for (int i = 0; i < 4; i++) { // 获取当前线程的名字 // String thread…
XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数据,其焦点是数据的内容. HTML 被设计用来展示数据,其焦点是数据的外观. HTML可以不关闭标签(即标签可以不成对出现),但XML必须关闭标签(即标签必须成对出现). HTML中的标签标识文本如何展示,而XML中的标签标识文本是什么含义(什么类型的文本). XML文档节点类型 u     文档(…
阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thread 2.实现Runnable接口 二者的区别我们举一个例子来进行分析 Java中有两种实现多线程的方式.一是直接继承Thread类,二是实现Runnable接口.那么这两种实现多线程的方式在应用上有什么区别呢? 为了回答这个问题,我们可以通过编写一段代码来进行分析.我们用代码来模拟铁路售票系统,实…
一.list简介 List列表类,顺序存储任何对象(顺序不变),可重复. List是继承于Collection的接口,不能实例化.实例化可以用: ArrayList(实现动态数组),查询快(随意访问或顺序访问),增删慢.整体清空快,线程不同步(非线程安全).数组长度是可变的百分之五十延长 LinkedList(实现链表),查询慢,增删快. Vector(实现动态数组),都慢,被ArrayList替代.长度任意延长.线程安全(同步的类,函数都是synchronized) Stack(实现堆栈)继承…
一.普通thread /** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果.这样可以快速简单的实现,代码如下: * @author GT * */ public class Task1 { public static void main(String[] args) { // run in a second final long timeInterval = 1000; Runnable runn…
转载:http://baijiahao.baidu.com/s?id=1602265641578157555&wfr=spider&for=pc 前言 线程是程序的一条执行线索,执行路径,是程序使用cpu的最小单位.线程本身不能运行,它只能运行在程序中,线程是依赖于程序存在的. 多线程的意义 其实任何一个程序的执行都需要获得cpu的执行权,是由cpu来去决定到底是由哪个程序来去执行,那么多线程的存在其实就是“最大限度的利用cpu资源”,当某一个线程的处理不需要占用cpu而之和I/O打交道的…
线程创建简介 1.在java中表示线程的是Thread类.无论是那种方式创建线程,本质上都是创建Thread类的对象. 2.Thread类继承Runnable接口,且也有以Runnable作为参数的构造方法. 3.FutureTask这个类也实现了Runnable接口,故也可以作为参数传进Thread 里面来创建线程. 线程的创建 继承Thread类 package thread; /** * 继承thread类来创建线程 * * @author dh * */ public class Ext…
java内存管理主要有内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象. java中对象的引用主要有四种:强引用,软引用,弱引用,虚引用. Java中提供这四种引用类型主要有两个目的: 第一是可以让程序员通过代码的方式决定某些对象的生命周期: 第二是有利于JVM进行垃圾回收. 详情参见:https://www.cnblogs.com/huajiezh/p/5835618.html…
1.数组的输出的三种方式 一维数组: 定义一个数组 int[] array = {1,2,3,4,5}; (1)传统的for循环方式 for(int i=0;i<array.length;i++) { System.out.println(array[i]); } (2)for each循环 for(int a:array) System.out.println(a); (3)利用Array类中的toString方法 调用Array.toString(a),返回一个包含数组元素的字符串,这些元素…
传统的实现线程的方式为三种,分别为继承Thread类,重写run()方法:实现Runable接口,重写run()方法:实现callable接口,重写call()方法:下面来记录一下最基本的三种编码实现. 一.继承Thread public class ExtendsThread extends Thread{ public void run(){ System.out.println("Hello Thread"); } public static void main(String[]…
Foo foo = new Foo(); 第一种:通过Object类的getClass方法 Class cla = foo.getClass(); 第二种:通过对象实例方法获取对象 Class cla = foo.class; 第三种:通过Class.forName方式 Class cla = Class.forName("xx.xx.Foo"); 对于有空构造函数的类 可以直接用字节码文件获取实例: Object o = clazz.newInstance(); // 会调用空参构造…
一种是继承Thread类,一种是实现Runable接口,还有一种是实现callable接口: 有博主说只有前面2种方式,我个人愚见是三种,主要详细介绍下callable的使用: 三种线程的我的个人理解: thread 是最简单的,简单粗暴也是最基础的,复写run()方法,start启动就好了: runable 是thread基础上的改进版本runable 主要的贡献在于实现了资源的共享,比如说在线选座的座位资源就需要共享这个时候就一定要使用runable,但是他也需要thread 的帮忙: ca…
在java中遍历一个list对象的方法主要有以下四种: 1. For Loop —— 普通for循环 2. Advanced For Loop —— 高级for循环 3. Iterator Loop —— 迭代器遍历 4. While Loop —— while循环 具体可以参考以下代码: import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Main { public…
import java.util.ArrayList;  import java.util.Collection;import java.util.Iterator;public class Home {    public static void main(String[] args) {        // TODO Auto-generated method stub        Collection<String> c1 = new ArrayList<String>()…
1.通过静态成员字段来实例化 public class Elvis { /** * 通过final的静态成员字段来调用私有的构造函数实例化对象 */ public static final Elvis INSTANCE = new Elvis(); /** * 私有构造函数,防止在类以外被实例化 */ private Elvis() { } public void leaveTheBuilding() { System.out.println("Leave the building...&quo…
int[] array = {1,2,3,4,5}; (1)传统的for循环方式 ;i<array.length;i++) { System.out.println(a[i]); } (2)for each循环 for(int a:array){ System.out.println(a); } (3).利用Array类中的toString方法 调用Array.toString(a),返回一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号分开 ,,,,}; System.out.prin…
  无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与"引用"有关.在Java语言中,将引用又分为强引用.软引用.弱引用.虚引用4种,这四种引用强度依次逐渐减弱.无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与"引用"有关.在JDK 1.2以前,Java中的引用的定义很传统:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地…
1 准备数据 1.1 目标 为了形象地演示线程的工作现象, 准备两个文件datas/odds.txt和datas/evens.txt, 分别存储奇数和偶数, 内容如下: odds.txt 1 3 5 7 9 11 13 15 17 19 evens.txt 2 4 6 8 10 12 14 16 18 20 1.2 实现思路 思路一: 文件不多, 内容不多, 手动创建, 完全可以搞定 选择此思路的同学可以跳过本章, 直接看后面线程的实现 思路二: 写一个数据生成类GenData, 可以随意生成各…
1. 基于数组 package Algorithm.learn; import java.util.Arrays; /** * Created by liujinhong on 2017/3/7. */ public class ArrayQueue<E> { Object[] queue; int size; public ArrayQueue() { queue = new Object[10]; } public boolean isEmpty() { return size == 0;…
线程实现的三种种方式: 一个是继承Thread类,实现run()方法: 一个是实现Runnable接口,实现run()方法: 一个是实现Callable接口,实现call()方法:该方式和实现Runnable接口的区别在于,call()方法允许申明抛出异常,而且允许带返回值. 该方式在jdk1.5以后提供 继承Thread和 实现runnable接口 生成的线程在共享线程类的实例属性上不同,前者不能共享实例属性,后者可以, 因为后者创建的runnable对象仅仅是线程的target  而多个线程…
java Timer比较具体的实现实例 https://www.cnblogs.com/0201zcr/p/4703061.html 转载大神 的 https://blog.csdn.net/kegumingxin2626/article/details/72854823…
主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Callable.Future实现有返回结果的多线程. 1.继承Thread类创建线程Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例.启动线程的唯一方法就是通过Thread类的start()实例方法.start()方法是一个native方法,它将启动一个新线程,并执行run()方法.这种方式实现…
1.这是最常见的并且在大多数情况下也是最可取的遍历方式,在键值都需要时使用. Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = "…
1.单行注释 // //单行注释 2.多行注释 /* */ /* 多行 注释 */ 3.文档注释[java特有的] /** */ ◆注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档 ◆操作方式 c:路径\javadoc -d 定义个文件名 -author -version 程序名.java /** @author 指定Java程序的作者 @version 指定源文件的版本 */…
方式一:继承Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run()方法---> 将此线程执行的操作声明在run()中 3.创建Thread类的子类的对象 4.通过此对象调用start()方法开启线程 //1.创建一个继承于Thread类的子类 public class ThreadDemo extends Thread { //2.重写Thread类的run()方法---> 将此线程执行的操作声明在run()中 @Override public void r…