
Java
文章平均质量分 58
Fuzz_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java多线程的应用
一般只要是产生的CPU资源浪费,就需要多线程来提升效率。我们举一个例子,例如一个网络爬虫项目,其中有两个环节1.数据抓取:假设平均每个网站的抓取大约需要50ms。2.数据处理(遍历数据):假设每个网站的数据处理需要这样的话如果使用单线程,平均处理每个网站的时间大约是52ms。其实这样已经产生的大量的资源浪费。在CPU进行数据抓取的50ms时,CPU的数据处理没办法进行,所以...原创 2018-10-09 20:29:24 · 799 阅读 · 0 评论 -
Java的静态内部类
有时候, 使用内部类只是为了把一个类隐藏在另外一个类的内部,并不需要内部类引用外围类对象。为此,可以将内部类声明为 static, 以便取消产生的引用。下面是一个使用静态内部类的典型例子。考虑一下计算数组中最小值和最大值的问题。当然, 可以编写两个方法, 一个方法用于计算最小值,另一个方法用于计算最大值。在调用这两个方法的时候,数组被遍历两次。如果只遍历数组一次, 并能够同时计算出最小值和最大值,...原创 2018-08-20 20:01:36 · 241 阅读 · 0 评论 -
Java的匿名内部类
顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。 匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的: ·只用到类的一个实例。 ·类在定义后马上用到。 ·类非常小(SUN推荐是在4行代码以下) ·给类命名并不会导致你的代码更容易被理解。 在使用匿名内部类时,要记住以下几个原则...原创 2018-08-20 19:58:00 · 373 阅读 · 0 评论 -
Java内部类
内部类( inner class) 是定义在另一个类中的类。为什么需要使用内部类呢? 其主要原因有以下三点:•内部类方法可以访问该类定义所在的作用域中的数据, 包括私有的数据。•内部类可以对同一个包中的其他类隐藏起来。•当想要定义一个回调函数且不想编写大量代码时,使用匿名 (anonymous) 内部类比较便捷。内部类的语法比较复杂。鉴于此情况, 我们选择一个简单但不太实用的例子说...原创 2018-08-20 19:52:42 · 197 阅读 · 0 评论 -
lambda表达式
我们传人代码来检查一个字符串是否比另一个字符串短。这里要计算:first.length() - second.length()first 和 second 是什么? 它们都是字符串。Java 是一种强类型语言,所以我们还要指定它们的类型:(String first, String second)-> first.length() - second.length()这 就 ...原创 2018-08-20 19:45:57 · 135 阅读 · 0 评论 -
Java接口
接口中,我们需要注意以下几点:接口中的所有方法自动地属于 public。 因此,在接口中声明方法时,不必提供关键字public 接口绝不能含有实例域, 在 JavaSE 8之前, 也不能在接口中实现方法。接口不是类,尤其不能使用 new 运算符实例化一个接口:x = new Comparable(. . .); // ERROR接口变量必须弓I用实现了接口的类对象:x ...原创 2018-08-16 20:34:26 · 2104 阅读 · 0 评论 -
Java类HashCode说明以及派生类一些HashCode重写
散列码(hash code)是由对象导出的一个整形值。散列码是没有规律的。如果x和y是两个不同的对象,x.hashCode()与y,hashCode()基本上不回相同String类使用下列算法计算散列码:这样会是散列码更加均匀int hash = 0;for (int i = 0 ; i<length() ; i++) hash = 31 * hash + charA...原创 2018-07-21 14:50:48 · 205 阅读 · 0 评论 -
equlas方法
Object类中的equals方法用于检测一个对象是否等于另外一个对象。在Object类中,这个方法将判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。从这点上看,将其作为默认操作也是合乎情理的。然而,对于多数类来说,这种判断开没有什么意义。例如,采用这种方式比较两个PrintStream对象是否相等就完全没有意义。然而,经常需要检测两个对象状态的相等性,如果两个对象的...原创 2018-07-21 14:03:29 · 454 阅读 · 0 评论 -
Java访问修饰符
在Java中,有四种可见性的访问修饰符: 仅对本类可见(也可以在嵌套时调用)——private 对所有类可见——public 对本包和所有子类可见——protected 对本包可见——默认,不需要修饰符在实际应用中,要谨慎使用protected属性。假设需要将设计的类提供给其他程序员使用, 而在这个类中设置了一些受保护域,由于其他程序员可以由这个类再派生出新类,并访问其中的受保护域。...原创 2018-07-21 13:59:38 · 222 阅读 · 0 评论 -
抽象类abstract
我们先来看一下Person类和子类的继承图,我们可以声明一个Person的父类,然后让它的子类派生,因为它的子类各有不同的属性和参数,所以为Person类实例方法显得有些浪费内存,这样,我们可以使用abstract关键字进行声明,这样就完全可以不需要实现这个方法了。为了提高程序的清晰度,包含一个或多个抽象方法本身必须被声明为抽象的。建议大家在抽象类中不要包含具体方法,尽量将通用的域和方...原创 2018-07-21 13:58:21 · 339 阅读 · 0 评论 -
对象的强制类型转换
我们以前说过,将一个类型强制转换成另外一个类型的过程被称为类型转换。Java程序设计语言提供了一种专门用于进行类型转换的表示法。例如:double X = 3.405;int nx = (int) x;将表达式x的值转换成整数类型,舍弃了小数部分。正像有时候需要将浮点型数值转换成整型数值一样,有时候也可能需要将某个类的对象引用转换成另外一个类的对象引用。对象引用的转换语法与数值表...原创 2018-07-21 13:35:13 · 4973 阅读 · 0 评论 -
多线程面试题
1).什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对 运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支 持。2).线程和进程有什么区别?线程是进程的子集,一个进程可以有很多线程,每条线...原创 2018-09-12 00:06:08 · 193 阅读 · 0 评论 -
Java线程简介(什么是线程)
一、线程概述线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,这些进程包括系统进程(由操作系统内...原创 2018-10-04 15:58:06 · 6937 阅读 · 0 评论 -
Java多线程----线程的中断
一、什么是线程切换,线程阻塞,线程中断?线程切换:我们知道,CPU是以时间片进行线程调度的,一个线程在占有一个分配的时间片之后,CPU就会根据相应的策略进行线程的重新调度,这个过程会很大程度上参考线程的优先级,当然调度策略也会考虑到各个线程的等待时间等。也就是说,若是当前线程的优先级足够高的话,那么就有可能在下一次的CPU调度中再次获得一个时间片。若是当前线程未能再次获得时间片,那么它就要插入...原创 2018-10-04 16:11:13 · 243 阅读 · 0 评论 -
Java多线程简单样例(三):购票窗口实现票数同步
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock; public class ThreadTicket { public static void main(String[] args) { Booking b1 = new Booking...原创 2018-10-05 16:30:34 · 1169 阅读 · 0 评论 -
Java多线程-----线程池的使用,原理以及举例实现(三)(四):使用样例及如何配置线程池大小
三.使用示例 前面我们讨论了关于线程池的实现原理,这一节我们来看一下它的具体使用:public class Test { public static void main(String[] args) { ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.M...原创 2018-10-05 16:33:08 · 243 阅读 · 0 评论 -
Java多线程-----线程池的使用,原理以及举例实现(二):深入剖析线程池实现原理
在上一节我们从宏观上介绍了ThreadPoolExecutor,下面我们来深入解析一下线程池的具体实现原理,将从下面几个方面讲解: 1.线程池状态 2.任务的执行 3.线程池中的线程初始化 4.任务缓存队列及排队策略 5.任务拒绝策略 6.线程池的关闭 7.线程池容量的动态调整 1.线程池状态 在ThreadPoolExecutor中定义了...原创 2018-10-04 22:16:25 · 206 阅读 · 0 评论 -
Java多线程-----线程池的使用,原理以及举例实现(一):Java中的ThreadPoolExecutor类
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的...原创 2018-10-04 21:59:18 · 223 阅读 · 0 评论 -
Java多线程---阻塞队列详解(举例说明)
一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。二. 认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个...原创 2018-10-04 21:40:56 · 549 阅读 · 0 评论 -
Java多线程----线程的同步,锁和死锁,问题以及解决方法(例子说明)
一、线程并发同步概念线程同步其核心就在于一个“同”。所谓“同”就是协同、协助、配合,“同步”就是协同步调昨,也就是按照预定的先后顺序进行运行,即“你先,我等, 你做完,我再做”。线程同步,就是当线程发出一个功能调用时,在没有得到结果之前,该调用就不会返回,其他线程也不能调用该方法。就一般而言,我们在说同步、异步的时候,特指那些需要其他组件来配合或者需要一定时间来完成的任务。在多线程编程...原创 2018-10-04 21:37:14 · 3536 阅读 · 1 评论 -
java多线程的未捕获异常处理机制
一:为什么要单独讲多线程的异常捕捉呢?先看个例子:public class ThreadException implements Runnable{ @Override public void run() { throw new RuntimeException(); } //现象:控制台打印出异常信息,并运行一段时间后才停止 public static v...原创 2018-10-04 20:02:35 · 2529 阅读 · 0 评论 -
Java多线程之守护线程
守护线程在没有用户线程可服务时自动离开,在Java中比较特殊的线程是被称为守护(Daemon)线程的低级别线程。这个线程具有最低的优先级,用于为系统中的其它对象和线程提供服务。将一个用户线程设置为守护线程的方式是在线程对象创建之前调用线程对象的setDaemon方法。典型的守护线程例子是JVM中的系统资源自动回收线程,我们所熟悉的Java垃圾回收线程就是一个典型的守护线程,当我们的程序中不再有任何...原创 2018-10-04 19:54:01 · 171 阅读 · 0 评论 -
Java线程的优先级
Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的“线程优先级的问题“)。记住当线程的优先级没有指定时,所有线程都携带普通优先级。 优先级可以用从1到10的范围指定。10表示最高优先级,1表示最低优先级,5是普通优先级。 记住优先级最高的线程在执行时被给予优先。但是不能保证线程在启动时就进入运行状态。 与在线程池中等待运行机会的线...原创 2018-10-04 19:22:52 · 743 阅读 · 0 评论 -
线程的六种状态及其状态的转换
1.线程自身信息线程运行的过程会产生很多信息,这些信息都保存在Thread类中的成员变量里面,常见的有:线程的ID是唯一标识getId() 线程的名称:getName(),如果不设置线程名称默认为“Thread-xx” 线程的优先级:getPriority,线程优先级从1-10,其中数字越大表示优先级别越高,同时获得JVM调度执行的可能性越大,JDK内置了三种常见的状态://...原创 2018-10-04 18:15:26 · 21967 阅读 · 4 评论 -
阻止继承:final类和方法
有时候,可能希望阻止人们利用某个类定义子类。不允许扩展的类被称为final类。如果在定义类的时候使用了final 修饰符就表明这个类是final类。例如,假设希望阻止人们定义Executive类的子类,就可以在定义这个类的时候,使用final修饰符声明。声明格式如下所示: public final class Executive extends Manager{ 。。。。}...原创 2018-07-21 13:33:34 · 475 阅读 · 0 评论 -
对象调用方法的解析过程
弄清楚如何在对象上应用方法调用非常重要。下面假设要调用x.f(args),隐式参数x声明为类C的一个对象。 下面是调用过程的详细描述: (1)编译器查看对象的声明类型和方法名。假设调用x.f(param),且隐式参数x声明为C类的对象。 需要注意的是:有可能存在多个名字为f,但参数类型不一样的方法。 例如可能存在方法f(int)和方法f(String)。编译器将会一一列举所有 C类中名为f的...原创 2018-07-21 13:30:41 · 2747 阅读 · 0 评论 -
用超类对象接收new出来的子类对象时,数据会不会丢失
我么会常常遇到用超类的对象来接收new的子类对象,这样会不会出现数据丢失呢?我们先来看这段代码:public class Car { private String name = "汽车"; private double price = 10000; public String getName() { return name; } public void setName(S...原创 2018-07-17 18:41:32 · 597 阅读 · 0 评论 -
初始化块的执行顺序
我们先来看一段代码。public class Car { private static String Name = "汽车"; private String name = "汽车"; private double price = 10000; public Car() { System.out.println("这是构造函数"); System.out.print...原创 2018-07-17 17:18:10 · 326 阅读 · 0 评论 -
方法参数
通过重载类的构造器方法,可以采用多种形式设置类的实例域的初始状态。确保不管怎样调用构造器,每个实例域都可以被设置为一个有意义的初值,这是一种很好的编程习惯。class Employee { private String name = "";}当然了,初始值不一定都是常量值。也可以用方法对域进行初始化。例如:class Employee { private stat...原创 2018-07-16 19:47:06 · 524 阅读 · 0 评论 -
值类型和引用类型做参数时的值会不会影响实参
我们知道,一个方法是可以有形参的,也就是方法名后括号里的参数,当我们调用此方法,并向里面传入参数时,也就是实参,那这个实参会不会改变呢?当我们传入int类型的值时,无论传入的形参是多少,他本身的实参并不会改变,八大数据类型都为值类型。当我们传入引用类型的值时,他本身的实参会根据方法里的语句做出改变。还有一种引用类型,他非常特殊,他就是String,String虽然是引用类型,但是他在调...原创 2018-07-16 19:32:49 · 1752 阅读 · 0 评论 -
Java的编程小习惯——空格
我们在用Java编程编程时要注意合理使用空格,在以下几种情况下我们建议使用空格,这样不仅会增加代码的美观,也可以让别人看起来比较方便(1)在大括号之前加空格(2)在小括号里加空格(3)在等号,大于号,或者其他运算符的前后加空格这样会显得代码更加美观。...原创 2018-07-09 19:45:35 · 5388 阅读 · 2 评论 -
Java控制流程(if、while、do/while、for、switch)
一、块作用域块(block),即复合语句,是由一对大括号括起来的若干条件简单的Java语句。。块确定了变量的作用域,一个块可以嵌套在另一个块中。static { }二、条件语句在Java中,条件语句的格式为:if(condition) statement ,这里的条件必须用括号括起来if循环有三种,上面是流程图解,下面我们用代码来实现。public static void main(Stri...原创 2018-07-09 19:40:19 · 2563 阅读 · 0 评论 -
String 数据类型
从概念上来讲,Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在标准Java类库的一个实例。String str = "0123456789";一、拼接与绝大部分程序设计语言一样,java语言允许使用+连接两个字符串。例如Stringstr = "0123456789";Stringstr1 = "111213";System.out.println...原创 2018-07-08 18:31:52 · 1141 阅读 · 0 评论 -
Java安装入门教程(包括JDk安装和环境变量的配置)
一 、Java程序设计环境1. 安装Java开发工具包 需要简单掌握jdk的版本历史,重点是2006年版本号得到简化。Java标准版的下一个版本取名为Java 6,后来有了Java 7,Java 8.不过,内部版本号分别是“1.6.0”“1.7.0”“1.8.0”。 另一个需要注意的是,在Windows下安装Jdk需要正确选择64位(x64)和32位(x86)。对于Linux系统而言,...原创 2018-07-08 00:42:15 · 506 阅读 · 0 评论 -
个人总结
学习了2年Java EE企业级应用开发,大三暑假之期,决定把以前学过的东西整理复习一下,学习一下新的知识,巩固以前快忘了的知识,充分利用其自己的时间,为以后的找工作做准备。...原创 2018-07-08 13:33:23 · 378 阅读 · 2 评论 -
Java的八大数据类型
数据类型 java一共有八大数据类型,四个整型,两个浮点型,一种用于表示Unicode编码的字符单元的数据类型char和一种用于表示真值的boolean类型。 3.1 整型类型存储需求取值范围int4字节-2147483648 ~ 2147483647short2字节-32768 ~ 32767long8字节-9223372036854775808 ~ 9223372036854775...原创 2018-07-08 13:29:35 · 431 阅读 · 0 评论 -
对象包装器与自动装箱(Java的128陷阱)
有时, 需要将 int 这样的基本类型转换为对象。 所有的基本类型都冇一个与之对应的类。例如,Integer 类对应基本类型 int。通常,这些类称为包装器 ( wrapper ) 这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character 、Void 和 Boolean (前6 个类派生于公共的超类 Number)。对象包装...原创 2018-07-23 18:18:01 · 305 阅读 · 0 评论 -
枚举类型
下面是一个典型的枚举类型的例子:public enuni Size { SMALL , MEDIUM, LARGE, EXTRAJARGE };实际上, 这个声明定义的类型是一个类, 它刚好有 4 个实例, 在此尽量不要构造新对象。因此, 在比较两个枚举类型的值时, 永远不需要调用 equals, 而直接使用“= =” 就可以了。如果需要的话, 可以在枚举类型中添加一...原创 2018-07-23 18:24:02 · 981 阅读 · 0 评论 -
Java 的反射机制
反射库( reflection library) 提供了一个非常丰富且精心设计的工具集, 以便编写能够动态操纵 Java 代码的程序。这项功能被大量地应用于 JavaBeans 中, 它是 Java组件的体系结构。使用反射,Java 可以支持 Visual Basic用户习惯使用的工具。特别是在设计或运行中添加新类时, 能够快速地应用开发工具动态地查询新添加类的能力。能够分析类能力的程序称为反...原创 2018-07-23 18:30:06 · 160 阅读 · 0 评论 -
基于类的访问权限
我们已经知道,方法可以访问所调用对象的私有数据。一个方法可以访问所属类的所有对象的私有数据。class Employee { public boolean equals(Employee B) { return name.equals(B.name); }}这个方法访问的B的私有域,这点并不会让人奇怪,然而,他还访问了B的私有域。这是合法的,其原因就是B是Emp...原创 2018-07-13 19:15:51 · 218 阅读 · 0 评论