Java
K.Sun
这个作者很懒,什么都没留下…
展开
-
Java中线程池的种类
因为线程的创建和销毁是一项十分消耗资源的操作,为了避免这种浪费,所以可以用线程池,Java中提供了4种线程池:newCachedThreadPoolnewCachedThreadPool创建一个可缓存线程池,理论上线程数目是没有什么限制的,其实最大数目是Interger.MAX_VALUE,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。适用于执行很多短期异步的小程序或者负载原创 2017-10-05 12:44:48 · 377 阅读 · 0 评论 -
数字图像处理——用Java获取像素点的RGB值
从前面的文字中就可以看出,对数字图像的处理都是在像素级上操作的,准确地讲是操作像素点的RGB值,在图像取反和灰度图像转换两篇中已经涉及到了对RGB操作的相关代码,相信大家已经也看到了,就是这一段:for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { int p = image.getRGB(i原创 2017-05-31 20:15:26 · 15055 阅读 · 1 评论 -
数字图像处理——用Java将彩色图像转换为灰度图像
灰度图直观地讲就是将原来的RGB图像转换为只有灰度级的图像,做这一步处理也比较简单,只要把每个像素点的RGB值拿出来,算一下他们的平均值(R+G+B)/3(R+G+B)/3,然后再替换原来的RGB值就OK了。原图: 处理后的图像: 代码实现:import java.io.File;import java.io.IOException;import java.awt.image.Buf原创 2017-05-31 20:03:20 · 9027 阅读 · 0 评论 -
数字图像处理——用Java对数字图像取反
图像取反相当于取底片,对于每个像素点的RGB来讲,就是: R′=255−RR'=255-RG′=255−GG'=255-GB′=255−BB'=255-B用R’,G’,B’来替换R,G,B。直接上图吧,假如原图像是这样的: 那么处理后的图像就是这样的: 代码实现如下:import java.io.File;import java.io.IOException;import java原创 2017-05-31 19:46:42 · 4105 阅读 · 0 评论 -
Java发送邮件
原文地址:Send email using Java Program如果你在Java,J2EE或者Python平台上写代码,那么发送邮件是一个基本不用考虑的需求。发送邮件可能需要发送错误警告和注册人或者登录人的确认。Java提供这样的一些功能。Java需要三样东西来发送邮件:JavaMail APIJava Activation Framework (JAF)SMTP服务器详情你可以从Jav翻译 2017-05-30 13:01:23 · 753 阅读 · 0 评论 -
Java运行时数据区
在《Java虚拟机规范》中,将Java运行时数据区分为六个部分:PC计寄存器,Java虚拟机栈,Java堆,方法区,运行时常量池,本地方法栈。PC寄存器PC寄存器(Program Counter Register),在大学期间《计算机体系结构》这门课中有介绍过这个概念,简单地讲可以看做是指向当前执行指令的指示器,在Java虚拟机中,这个概念也类似,如果线程正在执行一个Java方法,那么它指向的正是这原创 2017-02-12 15:47:58 · 492 阅读 · 0 评论 -
Java中CountDownLatch与CyclicBarrier的区别
CountDownLatch与CyclicBarrier都是Java并发框架下的两个类型,它们的作用也很相似,就是等待所有的线程都到位,然后放马所有线程。那么它们到底有啥区别呢?1、CountDownLatch与CyclicBarrier虽然都采用计数方法等待线程,但是CountDownLatch是做减法,到0的时候放马。CyclicBarrier做的是加法。2、CountDownLatch等到是0原创 2016-12-08 19:27:50 · 692 阅读 · 0 评论 -
Java并发编程中Semaphore的用法
Semaphore又称信号量,是操作系统中的一个概念,在Java并发编程中,信号量控制的是线程并发的数量。public Semaphore(int permits)其中参数permits就是允许同时运行的线程数目;下面先看一个信号量实现单线程的例子,也就是permits=1:package concurrent.semaphore;import java.util.concurrent.Semaph原创 2016-12-25 21:13:13 · 24842 阅读 · 3 评论 -
Java并发编程中Exchanger的用法
Exchanger类源于java.util.concurrent包,它可以在两个线程之间传输数据,Exchanger中的public V exchange(V x)方法被调用后等待另一个线程到达交换点(如果当前线程没有被中断),然后将已知的对象传给它,返回接收的对象。如果另外一个线程已经在交换点等待,那么恢复线程计划并接收通过当前线程传给的对象:public class Car extends Th原创 2016-12-25 21:51:57 · 8268 阅读 · 1 评论 -
JAVA并发容器代码随读
原文地址:http://jm.taobao.org/2010/11/25/539/1. java.util.concurrent所提供的并发容器java.util.concurrent提供了多种并发容器,总体上来说有4类,队列类型的BlockingQueue和 ConcurrentLinkedQueue,Map类型的ConcurrentMap,Set类型的ConcurrentSkipListSet和转载 2017-01-09 13:56:00 · 387 阅读 · 0 评论 -
Java中什么时候会发生内存泄漏?
我们都知道,Java与C++一个很大的区别就是Java有垃圾回收机制,C++的中的对象必须得手动处理,这样才不至于发生内存泄漏这样的悲剧。C++中如果不及时处理无用的对象,会发生内存泄漏,那Java中会不会发生内存泄漏呢,答案是肯定的。我们都知道Java中对未被引用的对象进行垃圾回收,如果还有引用的话,那就让它多活一会儿。但是假设我们考虑这样一种情况,在内存中有这么两个对象,它们一个生存周期远大于另原创 2017-01-17 18:51:22 · 4818 阅读 · 0 评论 -
数字图像处理——用Java对数字图像进行读写
数字图像处理是计算机视觉,视频语义分析的基础知识。要对数字图像进行处理,比如调整灰度级,图像增强,图像模糊等等操作,首先要对图像进行读写操作。用Java对数字图像进行读写比较简单,用ImageIO.read读,用ImageIO.write写。import java.io.File;import java.io.IOException;import java.awt.image.BufferedI原创 2017-05-31 19:31:27 · 2076 阅读 · 0 评论 -
数字图像处理——用Java对数字图像写水印
写水印这个是数字图像处理中十分常见的操作,比如我们在CSDN上传个图片啥的,它还要在图片的右下方写点“http://blog.csdn.net/sinat_36246371”,那么我们用Java代码也在图片上写点啥,直接看代码吧。import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt原创 2017-05-31 20:46:31 · 1020 阅读 · 0 评论 -
Java中的Callable和Future
原文地址:http://www.geeksforgeeks.org/callable-future-java/Callable的用处在Java中创建线程有两种方法——一种是继承Thread类,另一种是实现Runnable接口。但是Runnable没有的一个特点就是它不能在线程结束的时候返回结果,例如当run()结束了。Java中的Callable接口正好支持这个特征。Callable vs Runn翻译 2017-07-06 10:11:47 · 510 阅读 · 0 评论 -
Java中Thread类的start()方法和run()方法
我们知道在Java中可以通过继承一个Thread类来实现一个线程类,继承以后,需要重载run()方法,但是在启动线程的时候则又是用start()方法,这个是几个意思,启动直接用run()不行么,我们试一下。首先还是用start()方法启动线程:public class RunAndStart extends Thread{ @Override public void run() {原创 2017-07-05 18:29:17 · 3005 阅读 · 0 评论 -
Java中阻止线程执行的方法
原文地址:http://www.geeksforgeeks.org/java-concurrency-yield-sleep-and-join-methods/我们可以通过Thread类中的下面几个方法阻止线程的执行。yield()假设有三个线程t1,t2和t3。线程t1得到了处理器并且开始执行,线程t2和t3在等待/可执行状态。t1需要5小时可以完成,t2需要5分钟可以完成。因为t1在5个小时以后翻译 2017-07-05 13:56:47 · 2015 阅读 · 0 评论 -
Java中的Main线程
原文地址:http://www.geeksforgeeks.org/main-thread-java/Java对多线程编程提供了内置的支持。一个多线程程序可以包含两个或者更多的并发部分。每一部分都称为一个线程,而且每个线程都定义为一个独立的执行路径。Main Thread当一个Java程序启动以后,有一个线程就会立马跑起来。这就是通常所说的Main线程,因为当我的程序一启动,它就开始执行了。属性大翻译 2017-07-05 11:22:46 · 9059 阅读 · 3 评论 -
Java中的多线程
原文地址:http://www.geeksforgeeks.org/multithreading-in-java/多线程是Java的一个特征,它允许执行程序的两个或者更多的部分以使CPU利用最大化。程序的每个部分都称为线程。所以说线程是轻量级的进程。线程可以通过两种机制来创建:继承Thread类实现Runnable接口通过继承Thread类创建线程我们创建一个继承于java.lang.Thre翻译 2017-07-05 10:16:53 · 281 阅读 · 0 评论 -
Java中的字符串翻转
字符串翻转操作是再常见不过的问题了,C/C++中实际上就是操作字符数组,那么在Java中貌似不是直接就可以搞定的。既然不能直接搞定,那么就是可以间接搞定,间接搞定意思就是先把原字符串转换为数组的形式,然后再前后做调换:public class ReverseString { public static String swap1(String s) { byte[] byteA原创 2017-07-04 09:45:00 · 450 阅读 · 0 评论 -
Java中下划线用于表示数字
今天发现一个Java中表示数字的特殊用法,第一次发现下划线‘_’竟然能用于表示数据,看代码:public class UsingUnderscoreInNumericLiterals { public static void main(String[] args) { int int_num = 1_00_00_000; System.out.println(原创 2017-07-03 22:06:11 · 10486 阅读 · 8 评论 -
Java中的浅拷贝与深拷贝
先说明一下啥是浅拷贝,啥是深拷贝。浅拷贝就是拷贝完以后实际上在内存中还是一个对象。 深拷贝拷贝完以后就是两个独立的对象了。在代码上是怎么体现的呢?我们知道用==来判断,如果两个对象比较返回true,那这两个家伙是绝对相等的,注意这里的绝对,谁和它绝对相等啊,那就是它自己嘛?这个有点上升到哲学的观点了哈。如果拷贝还是绝对相等的,那就是浅拷贝。如果返回false,那这个就可能的原因多了,你可能从外表看原创 2017-06-09 16:50:32 · 302 阅读 · 0 评论 -
可作为GC Root的对象
在Java虚拟机中判断一个对象是否可以被回收,有一种做法叫可达性分析算法,也就是从GC Root到各个对象,如果GC Root到某个对象还有可达的引用链,那么这个对象就还不能被回收,否则就等着被收割吧。这里既然提到了GC Root,那么哪类对象可以作为GC Root呢,这是一个在面试中经常被问到的问题。《深入理解Java虚拟机》一书中是这么说的,一下几种对象可以作为GC Root:虚拟机栈中的引用原创 2017-06-07 19:44:13 · 9135 阅读 · 0 评论 -
数字图像处理——用Java对图像做镜像变换
水平镜像变换,也就是把图像的像素点按照垂直中线做调换。代码实现也很简单:import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;public class ImageMirror { public static void原创 2017-05-31 22:27:04 · 4195 阅读 · 0 评论 -
java.lang.System.arraycopy()方法
原文地址:java.lang.System.arraycopy() methodjava.lang.System为标准的输入输出,加载文件和类库,访问外部定于属性提供了一些十分有用的方法。 java.lang.System.arraycopy()方法是从一个源数组的指定开始位置拷贝元素到目标数组提到的位置。被拷贝的参数的数目由参数len决定。从source_Position到source_Posit翻译 2016-12-26 22:41:06 · 7070 阅读 · 0 评论 -
JDK 1.8中forEach的用法
Java中遍历容器主要用for,在JDK 1.8中提供了forEach方法,源码如下:/** * Performs the given action for each element of the {@code Iterable} * until all elements have been processed or the action throws an * exception. Unl原创 2017-01-03 21:35:11 · 10104 阅读 · 0 评论 -
Java中String、StringBuilder、StringBuffer的区别
Java中String、StringBuilder、StringBuffer是我们再熟悉不过的类型了,那么它们之间到底有啥区别呢。首先,String类型是不可变的,StringBuilder、StringBuffer是可变的。其次,StringBuilder与StringBuffer类似,无非就是在单线程的情况下StringBuilder要比StringBuffer快。如果要确保线程安全,那就用St原创 2016-12-08 12:08:26 · 380 阅读 · 0 评论 -
锯齿转变(ZigZag Conversion)
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H NA P L S I I原创 2016-10-12 22:44:49 · 678 阅读 · 0 评论 -
C++类默认的成员函数与Java Object类中的成员函数
C++空类默认成员函数class EmptyCppClass{ public: EmptyCppClass(); // 缺省构造函数 EmptyCppClass( const EmptyCppClass& ); // 拷贝构造函数 ~EmptyCppClass(); // 析构函数 EmptyCppClass& operator=( const原创 2016-10-16 16:56:25 · 550 阅读 · 0 评论 -
Java中的迭代器(Iterators in Java)
原文地址:http://www.geeksforgeeks.org/iterators-in-javaIterators are used in Collection framework in Java to retrieve elements one by one. There are three iterators.枚举:枚举是一种用于从遗留下来的集合(Vector,Has翻译 2016-10-14 21:52:47 · 804 阅读 · 0 评论 -
Java访问类中的私有成员(private member)
一般而言,一个类只允许访问另一个类中的public然而当我们非要访问私有成员的时候,这时候Java的反射机制就用得上了。package com.comac.reflect;public class A { private String testStr="just for test"; private void get(int index, String value)原创 2016-10-13 22:36:40 · 9738 阅读 · 0 评论 -
在数组中找出四个数字的和等于指定数字(4Sum)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.Note: The solution原创 2016-10-13 13:44:05 · 3060 阅读 · 0 评论 -
Java中HashMap与HashTable之间的区别
原文地址:http://quiz.geeksforgeeks.org/differences-between-hashmap-and-hashtable-in-java/HashMap and Hashtable store key/value pairs in a hash table. When using a Hashtable or HashMap, we specify an o翻译 2016-10-13 08:56:18 · 555 阅读 · 0 评论 -
Java中的随机数
原文地址:Generating random numbers in JavaJava提供了通过下列三种内置方法或者类产生随机数字的方式:java.util.Random类;Math.random方法:可以生成浮点类型的随机数;ThreadLocalRandom类;1)java.util.Random用这个类可以产生随机数字,我们首先得创建这个类的实例,然后用这个实例调用nextInt(),翻译 2016-11-03 16:25:51 · 461 阅读 · 0 评论 -
Java代码中如何交换两个对象
原文地址:How to swap or exchange objects in Java?Java代码如何交换对象假设我们有一个叫Car的类,这个类中也有一些属性。我们创建Car类的两个对象,一个叫car1,另一个叫car2,那如何交换car1与car2的数据呢?交换成员:例如,如果这个Car类只有一个整型的车号,我们可以通过交换两个车的号码来交换两个车。// A Java program to d翻译 2016-11-03 15:15:46 · 8014 阅读 · 3 评论 -
没有重复字符的最长子字符串(Longest Substring Without Repeating Characters)
Given a string, find the length of the longest substring without repeating characters.原创 2016-10-12 21:09:02 · 465 阅读 · 0 评论 -
最长回文子字符串(Longest Palindromic Substring)
Given a string S, find thelongest palindromic substring in S. You may assume that the maximumlength ofS is 1000, and there exists one unique longest palindromicsubstring.原创 2016-10-11 22:12:04 · 1193 阅读 · 0 评论 -
Linux环境中安装JDK
JDK安装到不同平台的方法大同小异,安装倒没啥,Windows环境鼠标一步步往下点就是了,Linux环境则是将下载好的jdk-8u101-linux-x64.tar.gz(纯属举例)解压出来,复制到相应的目录(一般是/usr/下)下就OK了,下来就都是配置环境变量了。Windows下的环境变量有系统变量与用户变量,顾名思义,系统变量就是登陆到该系统的所有用户都可以使用,而用户变量则只有当前用户可以使原创 2016-10-17 15:48:56 · 327 阅读 · 0 评论 -
Java中的迭代器(Iterators in Java)
原文地址:http://www.geeksforgeeks.org/iterators-in-javaIterators are used in Collection framework in Java to retrieve elements one by one. There are three iterators.枚举:枚举是一种用于从遗留下来的集合(Vector,HashTable)中获取元翻译 2016-10-15 13:04:26 · 2174 阅读 · 0 评论 -
Java中的LinkedList的方法的应用
LinkedList其实也就是我们在数据结构中的链表,这种数据结构有这样的特性:分配内存空间不是必须是连续的;插入、删除操作很快,只要修改前后指针就OK了,时间复杂度为O(1);访问比较慢,必须得从第一个元素开始遍历,时间复杂度为O(n);在Java中,LinkedList提供了丰富的方法,可以模拟链式队列,链式堆栈等数据结构,为用户带来了极大的方便,下面看看这些方法的用法:addboole原创 2016-12-17 17:10:40 · 47504 阅读 · 7 评论 -
Java中的HashMap与TreeMap
原文地址:HashMap and TreeMap in JavaHashMap与TreeMap是Collection框架中的一部分。 HashMapjava.util.HashMap类是一种基于哈希的实现。在HashMap中,我们有一个key和一个value,pairHashMap<K, V> hmap = new HashMap<K, V>();我们考虑下面的例子,我们需要对已知整型数组中的翻译 2016-11-27 23:02:54 · 1277 阅读 · 0 评论