
Thinking in Java
文章平均质量分 75
acm_lkl
这个作者很懒,什么都没留下…
展开
-
Thinking in Java---类型信息和java反射机制学习笔记
前面学习的多态给了我们一个很好的承诺:我们编写的代码只要与基类打交道,而不用为每一个新增加的子类写一份代码.但是这种思想在我们想要访问子类自己定义的方法时,就会有问题了.如下面的代码所示:class Base1{ void f(){ System.out.println("Base.f()"); }}class Sub extends Base1{ void原创 2015-06-18 14:16:40 · 1796 阅读 · 0 评论 -
Thinking in Java---线程通信+三种方式实现生产者消费者问题
前面讲过线程之间的同步问题;同步问题主要是为了保证对共享资源的并发访问不会出错,主要的思想是一次只让一个线程去访问共享资源,我们是通过加锁的方法实现。但是有时候我们还需要安排几个线程的执行次序,而在系统内部线程的调度是透明的,没有办法准确的控制线程的切换。所以Java提供了一种机制来保证线程之间的协调运行,这也就是我们所说的线程调度。在下面我们会介绍三种用于线程通信的方式,并且每种方式都会使用生产者原创 2015-08-31 20:31:00 · 1698 阅读 · 1 评论 -
Thinking in Java---如何正确的终止子线程
在进行多线程编程的时候,我们经常会启动多个子线程来完成一个任务,那么如何在任务完成的时候或则是在任务进行到一定程度的时候正确的退出这些线程就成了一个问题。下面就对这个问题进行一些探讨。一.无阻塞任务的终止 无阻塞任务的终止是最简单的情况,在这种情况下我们可以通过设定run()方法中while()循环结束的条件来很容易的正确终止这个任务。下面的这段代码演示了一般终止一个非阻塞任务的方法:packag原创 2016-01-19 14:04:58 · 3590 阅读 · 0 评论 -
Thinking in Java---从哲学家就餐问题看死锁现象
我们知道一个对象可以有synchronized方法或其他形式的加锁机制来防止别的线程在互斥还没释放的时候就访问这个对象。而且我们知道线程是会变成阻塞状态的(挂起),所以有时候就会发生死锁的情况:某个任务在等待另一个任务,而后者又在等待其它任务,这样一直下去,知道这个链条下的任务又在等待第一个任务释放锁,这样就形成了一个任务之间相互等待的连续循环,没有任务可以继续的情况。死锁的最大问题在于它发生的几率原创 2016-02-03 12:41:14 · 6270 阅读 · 5 评论 -
Thinking in Java---再谈线程通信
前面写过一篇关于线程通信的博客,但是只是简单的罗列了几种线程通信的形式及语法;这几天又把<>上对应的内容看了一遍,这一篇博客主要结合几个例子说明下几种线程通信方式的特点。 首先还是要明确线程通信要解决的问题是什么:考虑这么一个情况,我们现在要对一台车进行涂蜡和抛光,并且在进行抛光之前一定要保证已涂蜡,且在涂另一层蜡的时候,又要保证已经抛光;现在我们我们开启两个线程,一个负责涂蜡,另一个负责抛光;要原创 2016-02-02 20:48:59 · 1685 阅读 · 0 评论 -
Thinking in Java---Concurrent包下的新构件学习+赛马游戏仿真
Java5的java.util.concurrent包下引入了大量的用于解决并发问题的新类;相对于前面那些基础的线程同步和通信的方法,这些新类是一种更高层次上的抽象,使用起来还是比较容易的.这篇博客就来学习其中的两个新类:CountDownLatch和CyclicBarrier;并使用CyclicBarrier来模拟一个简单的赛马游戏.一.CountDownLatch 使用CountDownLat原创 2016-02-24 19:03:30 · 2404 阅读 · 1 评论 -
Thinking in Java---Java IO 总结之基本IO
初次接触Java IO的时候,我有一种措手不及的感觉,因为这个类库中的类实在是太多了!如果我们想要使用一个类进行输入输出,可能还需要创建其它几个类,实在是很麻烦。在这篇文章中我试图对Java IO类库进行一个梳理,总结一下几种常用的IO类组合。文章分为三个部分:1.Java操作目录的File类;2.Java经典的输入输出流;3.java的标准输入输出;4.”特立独行”的RandomAccessFil原创 2015-07-06 16:10:59 · 1576 阅读 · 0 评论 -
Thinking in Java--使用NIO实现非阻塞Socket通信
Java1.4提供了一种新的IO读取方式,称为NIO。NIO中使用了通道和缓冲器的概念,并且以块的形式操作数据,这样更接近操作系统IO操作的形式,提高了JavaIO的效率。NIO的核心类有两个Channel和Buffer。但是其实除了提升了基本IO操作的性能外,NIO还提供了非阻塞IO的功能。这里先介绍下阻塞IO和非阻塞IO的概念。考虑到应用程序发送出IO请求,如果这个IO请求会阻塞线程(就是线程停原创 2015-08-24 21:45:20 · 1589 阅读 · 0 评论 -
Thinking in Java---多线程仿真:银行出纳员仿真+饭店仿真+汽车装配工厂仿真
多线程一个很有意思的作用就是用于仿真,这篇博客就会结合几个仿真实例来综合运用一下前面所学的多线程并发知识。一.银行出纳员仿真 问题描述:银行会有很多来办业务的顾客,他们会排队等待服务;对于银行方面他们派出出纳员来服务顾客,如果排队的顾客数量过多,银行就会增加 出纳员的数量,如果顾客的数目过少,则减少出纳员的数目;总之要保持一个平衡。仿真思路:封装Customer类来表示顾客,每个顾客对象都会有一原创 2016-02-27 10:41:38 · 3134 阅读 · 2 评论 -
Thinking in Java---使用Java处理日期和时间
日期的处理是一个很常见的问题,Java中用来处理时间的有Date,DateFormat,Calendar这几个类。使用这几个类可以方便的获得一个时间对象、将时间对象以指定格式显示、将格式化的字符串解析为时间对象和对时间进行加减操作。1.Date类 Date类对象代表的就是时间对象,准确的来说是从1970-01-01 0:0:0以来的毫秒数 ,这个时间通常被称为Java 虚拟机(JVM)主机环境的原创 2016-08-02 20:13:19 · 644 阅读 · 0 评论 -
Thinking in Java --日志初步学习
1.log4j简介 Log4j由三个重要的组件构成:日志信息的级别(Loggers),日志信息的输出目的地(Appenders),日志信息的输出格式(Layouts)。日志信息的级别指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显 示内容。 1) Loggers Loggers组件可分为五个级别,分别为原创 2016-08-16 20:00:00 · 602 阅读 · 0 评论 -
Thinking in Java---多线程学习笔记(2)
多线程中的一个核心问题就是对共享资源的访问问题。因为不能准确的知道一个线程在何时运行,所以如果多个线程对共享资源进行修改的化,结果可能就出错了。解决这一冲突的基本思路就是当一个资源被一个任务使用时,在其上加锁;这样其它的任务就不能再访问这个资源,直到上面的锁打开;这样就可以实现一个序列化的访问共享资源。Java中提供了多种对访问共享资源的临界区代码进行加锁的方法,下面对这些方法进行一个归纳总结。原创 2015-07-13 12:37:06 · 875 阅读 · 0 评论 -
Thinking in Java--Java多线程学习笔记(1)
这几天开始学习java多线程并发编程的内容了,以前也学习过多线程的知识,但是总是觉得学的不是很清楚;希望这一次学习《java编程思想》能让自己对并发,多线程的概念有一个更加深入的了解。这一章估计要写好几篇博客了,这篇博客是对于基础的一个总结,主要内容是对启动一个线程的几种方式和对线程一些操作函数的总结。首先来了解一下多线程的概念,多线程看起来同一时刻在同时运行多个任务,但是从操作系统的层面来讲只是让原创 2015-07-13 11:45:16 · 1852 阅读 · 0 评论 -
Thinking in Java---多态初探
继承,封装,多态是面向对象程序设计中的三大特性.其实从某种成都上讲继承和封装都是在为多态做准备,下面我们来了解多态这个重要的概念及其实现原理. 一.什么是多态 所谓的多态就是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用). 我们知道java支持向上转型,所以对于从同一个基类继承而来的子类,我们都可以把其对象当原创 2015-05-26 15:50:11 · 1175 阅读 · 0 评论 -
Thinking in Java ---final关键字总结+初始化和类的加载
final关键字既可以用来修饰基本变量,引用也可以用来修饰方法和类。在修饰不同的对象时有不同的含义,很容易搞混淆,在此做一个小结。了解一下继承情况下变量的初始化和类的加载机制,也能让我们对程序运行时发生的一切有一个全局性的把握。一。final关键字 1.1 final关键字修饰变量 final关键字类似于C++中的const关键字,当它修饰基本变量时表明该变量一旦被初始化为原创 2015-05-21 23:00:44 · 2088 阅读 · 0 评论 -
Thinking in Java--抽象类与接口
记得上次阿里二面的时候就问了抽象类和接口的问题,当时回答的不太全面.这次又学到了这里,就做一个比较详细的总结. 一.抽象类与接口的定义 抽象类与接口都是java中一种更高层次上的抽象. 抽象类:我们用abstract关键字定义抽象类和抽象方法,抽象方法指的是只有定义没有实现的方法,并且规定如果一个类包含一个或者多个抽象方法,则一定要声明为抽象类.抽象类中也可以包含普通的方法,甚至完全没有抽象方原创 2015-05-27 11:24:08 · 1292 阅读 · 0 评论 -
Thinking in Java---内部类及一个迭代器实例
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿名内部类,局部内部类,嵌套类(静态内部类)等.下面简要的介绍以下这些内部类定义的语法. (1).对于普通的内部类,就是在外围类中插入另一个类的定义.如下面的代码:package lk原创 2015-06-01 17:03:56 · 1417 阅读 · 0 评论 -
Thinking in Java---异常处理机制
java的异常处理机制可以使程序有极好的容错性,让程序更加的健壮.所谓的异常,就是指的阻止当前方法或作用域继续执行的问题,,当程序运行时出现异常时,系统就会自动生成一个Exception对象来通知程序.这样就极大的简化了我们的工作. 当然java的异常对象有很多种,下面这幅图显示了java异常类的继承体系. 从图片中可以看到java将所有的非正常情况分成了两种: 异常(Exception)和错误原创 2015-06-09 09:48:12 · 1803 阅读 · 0 评论 -
Tinking in Java ---Java的NIO和对象序列化
前面一篇博客的IO被称为经典IO,因为他们大多数都是从Java1.0开始就有了的;然后今天这篇博客是关于NIO的,所以的NIO其实就是JDK从1.4开始,Java提供的一系列改进的输入/输出处理的新功能,这些新功能被统称为新IO(New IO ,简称NIO)。另一个概念对象序列化指的是将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列再转换成原来的对象。这样原创 2015-07-09 16:38:23 · 3036 阅读 · 0 评论 -
Thinking in Java--java正则表达式初步学习
正则表达式是一种强大的文本处理工具,使用正则表达式我们可以以编程的方法,构造复杂的文本模式,并且对输入的字符串进行搜索.在我看来,所谓正则表达式就是我们自己定义一些规则,然后就可以验证输入的字符串是不是满足这些规则,主要的问题在于定义这些规则时要用到一些比较特别的语法,加大了理解的难度.以前就学习过一次java的正则表达式,但是学的模模糊糊的;主要的原因在于正则表达式的语法实在是很复杂,所以这次又去原创 2015-06-12 16:21:50 · 1203 阅读 · 0 评论 -
Thinking in Java---泛型小结
1)基本概念: 泛型(Generic Type或Generics)是 对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看做是使用参数化类型时指定的类型的一个占位符,就像方法的形 式参数是运行时传递的占位符一样,泛型的体现主要是在集合框架里面可以看到,JCF里面应该是1.5里面使用泛型最多的地方。Java语言引入泛型是一个 较大的功能增强,不仅语言、原创 2015-07-03 14:06:40 · 1770 阅读 · 0 评论 -
Thking in Java---数组详解
虽然学习java也有几个月了,但是发现自己对java数组的使用还是显得不够熟练,比如说一个比较简单的自己指定对象数组的排序规则(类似于在C++中的重载sort()的comp()函数)就不知道怎么写。另外java数组的一些常用函数也不是很熟悉。所以借着学习这一章的机会,好好的做个总结。不过值得注意的是在集合框架中支持泛型后,我们应该尽量使用ArrayList而不是数组了。下面以小样例的形式展示常用的函原创 2015-07-04 08:33:51 · 1369 阅读 · 0 评论 -
类找不到总结java.lang.ClassNotFoundException
(1)org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver’ 答:sqljdbc.jar (2)java.lang.ClassNotFoundException: org.springfra转载 2016-08-18 18:43:43 · 4685 阅读 · 0 评论