2014年5月27日
摘要:
引用:http://lavasoft.blog.51cto.com/62575/51926/
一、概述
ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。
从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)。
阅读全文
posted @ 2014-05-27 00:27
上校
阅读(301)
推荐(1)
摘要:
ThreadLocal保证数据同步
package Thread.Common;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
class Accessor implements Runnable {
private final int id;
public Accessor(int idn) {
id = idn;
}
阅读全文
posted @ 2014-05-27 00:18
上校
阅读(677)
推荐(0)
2014年5月26日
摘要:
AtomicInteger原子操作实现同步
package Thread.Common;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
阅读全文
posted @ 2014-05-26 23:16
上校
阅读(6602)
推荐(0)
摘要:
数据类:
package Thread.MyCommon;
public class Data {
public int num = 0;
public synchronized int getEven() {
++num;
Thread.yield();//让另外线程先执行,加大测试效果几率
++num;
return num;
}
}
阅读全文
posted @ 2014-05-26 21:06
上校
阅读(8845)
推荐(0)
2014年5月25日
摘要:
1.主线程不能捕获到子线程的异常
package Thread.Exection;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExeceptionThread implements Runnable {
@Override
public void run() {
throw new RuntimeException();
}
阅读全文
posted @ 2014-05-25 23:49
上校
阅读(13384)
推荐(0)
摘要:
将另外一个线程join到当前线程,则需要等到join进来的线程执行完才会继续执行当前线程。
package Thread.join;
class Sleeper extends Thread {
private int duration;
public Sleeper(String name, int sleepTime) {
super(name);
duration = sleepTime;
start();
}
阅读全文
posted @ 2014-05-25 15:01
上校
阅读(6733)
推荐(0)
摘要:
后台线程不执行finally
package wzh.daemon;
import java.util.concurrent.TimeUnit;
class ADaemon implements Runnable {
@Override
public void run() {
阅读全文
posted @ 2014-05-25 13:42
上校
阅读(3204)
推荐(0)
摘要:
通过DaemonThreadFactory创建后台线程池
package wzh.daemon;
import java.util.concurrent.ThreadFactory;
public class DaemonThreadFactory implements ThreadFactory {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
阅读全文
posted @ 2014-05-25 13:26
上校
阅读(3196)
推荐(0)
摘要:
将线程设置成后台线程Daemons 主线程结果后,后台线程将自动结果。
package wzh.test;
import java.util.concurrent.TimeUnit;
class SimpleDaemons implements Runnable{
@Override
public void run() {
try {
while (true) {
阅读全文
posted @ 2014-05-25 12:26
上校
阅读(1311)
推荐(0)
摘要:
package wzh.test;
import java.util.ArrayList;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class TaskWithResult implements Callable{
private int id;
public TaskWithResult(int id){
this.id=id;
}
@Override
public String call() throws Exception {
return "result of TaskWithResult "+id;
}
}
阅读全文
posted @ 2014-05-25 10:46
上校
阅读(1905)
推荐(0)
摘要:
原文:http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。
对于直接继承Thread的类来说,代码大致框架是:
阅读全文
posted @ 2014-05-25 09:46
上校
阅读(488)
推荐(1)
2014年5月24日
摘要:
package com.produce;
import java.util.LinkedList;
import java.util.Queue;
/*@author shijin
* 生产者与消费者模型中,要保证以下几点:
* 1 同一时间内只能有一个生产者生产 生产方法加锁sychronized
* 2 同一时间内只能有一个消费者消费 消费方法加锁sychronized
* 3 生产者生产的同时消费者不能消费 生产方法加锁sychronized
* 4 消费者消费的同时生产者不能生产 消费方法加锁sychronized
* 5 共享空间空时消费者不能继续消费 消费前循环判断是否为空,空的话将该线程wait,释放锁允许其他同步方法执行
* 6 共享空间满时生产者不能继续生产 生产前循环判断是否为满,满的话将该线程wait,释放锁允许其他同步方法执行
*/
阅读全文
posted @ 2014-05-24 23:35
上校
阅读(1666)
推荐(0)
摘要:
写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面。照旧,文章依旧以例子为主,因为讲解内容的java书很多了,我觉的学以致用才是真。代码是写出来的,不是看出来的。
最后欢迎大家提出意见和建议。
【案例1】创建一个新文件
?
1
2
3
4
5
6
7
8
9
10
11
import java.io.*;
class hello{
public static void main(String[] args) {
File f=new File("D:\\hello.txt");
try{
f.createNewFile();
}catch (Exception e) {
e.printStackTrace();
}
}
}
【运行结果】:
阅读全文
posted @ 2014-05-24 00:01
上校
阅读(595)
推荐(0)
2014年5月22日
摘要:
public class HashMap
extends AbstractMap
implements Map, Cloneable, Serializable
public class TreeMap
extends AbstractMap
implements SortedMap, Cloneable, java.io.Serializable
HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)
阅读全文
posted @ 2014-05-22 22:21
上校
阅读(1593)
推荐(0)
摘要:
提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦。学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地设计你的程序结构。下面从以下几个方面来介绍:
阅读全文
posted @ 2014-05-22 20:41
上校
阅读(912)
推荐(0)
2014年5月21日
摘要:
package com.frank.chapter1;
// object.Documentation1.java
// TIJ4 Chapter Object, Exercise 13 - 1
/* Run Documentation1.java, Documentation2.java and Documentation3.java
* through Javadoc. Verify the resulting documentation with your Web browser.
*/
/** A class comment */
public class Documentation1 {
/** A field comment */
public int i;
阅读全文
posted @ 2014-05-21 23:13
上校
阅读(1923)
推荐(0)
摘要:
context.xml中增加WEB-INF/web.xml,Eclipse在修改了web.xml后将自动更新到tomcat服务器中。
WEB-INF/web.xml
--
!-- Uncomment this to enable Comet connection tacking (provides events
阅读全文
posted @ 2014-05-21 00:41
上校
阅读(1551)
推荐(0)
摘要:
在MyEclipse目录下搜索com.genuitec.eclipse.wizards
得到搜索结果 com.genuitec.eclipse.wizards_9.0.0.me201108091322.jar
解压出文件夹,修改com.genuitec.eclipse.wizards_9.0.0.me201108091322\templates\Servlet.java 的模板文件
使用jar命令将文件夹打包成jar包:
1.在dos窗口中进入到解压后的com.genuitec.eclipse.wizards_9.0.0.me201108091322文件夹
2.执行打包命令:
C:\Users\Victor\Desktop\com.genuitec.eclipse.wizards_9.0.0.me201108091322>jar cvf com.genuitec.eclipse.wizards_9.0.0.me201108091322.jar *
阅读全文
posted @ 2014-05-21 00:09
上校
阅读(278)
推荐(0)
2014年5月20日
摘要:
通过javac编译java文件
1.先导入需要引用的包
D:\Program Files (x86)\apache-tomcat-7.0.53\webapps\test\WEB-INF\classes>set cla
sspath=%classpath%;D:\Program Files (x86)\apache-tomcat-7.0.53\lib\servlet-api.j
ar
2.将java文件按包名称编译到当前文件夹
D:\Program Files (x86)\apache-tomcat-7.0.53\webapps\test\WEB-INF\classes>javac -
d . FirstServlet.java
阅读全文
posted @ 2014-05-20 20:41
上校
阅读(228)
推荐(0)
2014年5月19日
摘要:
package com.wzh.test.http;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
阅读全文
posted @ 2014-05-19 23:26
上校
阅读(272)
推荐(0)
摘要:
telnet是windows自带的网络连接工具,可以用于连接任何服务器。
通过Telnet连接服务端
Telnet localhost 8080
GET /news/1.html HTTP/1.1
Host:
将获取到如下信息:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
阅读全文
posted @ 2014-05-19 21:02
上校
阅读(401)
推荐(0)
摘要:
https通过非对称加密实现数据安全
1.CA机构提供数字证书,其中数字证书包含公钥。
2.浏览器自带功能验证数字证书是否是CA机构颁发的。
3.根据数字证书包含的公钥对表单数据进行加密。
4.公钥提供方再根据自己的私钥对数据进行解密。
阅读全文
posted @ 2014-05-19 00:40
上校
阅读(264)
推荐(0)
2014年5月18日
摘要:
jar -cvf news.war news
打包成 war 包后复制到webapps下,Tomcat将会解压。
阅读全文
posted @ 2014-05-18 20:35
上校
阅读(236)
推荐(0)
2014年5月17日
摘要:
1.在server.xml文件的前面加入。需要重新启动Tomcat才能生效。
如果是
将覆盖成缺省目录,则路径是 http://localhost:8080/1.html
http://localhost:8080/ 下原来的Tomcat主页将被覆盖。
2.在conf\Catalina\localhost目录下放入
阅读全文
posted @ 2014-05-17 23:36
上校
阅读(268)
推荐(0)
摘要:
在网络程序的调试过程中,经常发生一些出乎意料的事情,比如创建一个TCP服务失败,这时候往往需要查看系统的网络情况,最常用的网络抓包当然非WireShark模式。但往往很多时候只需要查看某个端口的使用情况,它到底被那个进程(对应PID)占用了,或者你还需要把它Kill掉。如果你在Windows操作系统,你可以使用netstat命令来查询PID,然后可以打开任务管理器,查看这个PID对应的进程名;如果PID没有显示,菜单》查看》选择列》选中PID即可;得知进程后,我们可以将进程杀掉。下面我简单描述一下我所了解的在Windows和Linux系统下处理方式。(假如我们需要确定谁占用了我们的9010端口)
1、Windows平台
在windows控制台窗口下执行:
netstat -nao | findstr "9010"
TCP 127.0.0.1:9010 0.0.0.0:0 LISTENING 3017
阅读全文
posted @ 2014-05-17 10:24
上校
阅读(2010)
推荐(0)
摘要:
以下为置JAVA_HOME,CLASSPATH,PATH的目的:
1,设置JAVA_HOME:
一、为了方便引用,比如,你JDK安装在C:\Program Files\Java\jdk1.6.0目录里,则设置JAVA_HOME为该目录路径, 那么以后你要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串;
二、归一原则, 当你JDK路径被迫改变的时候, 你仅需更改JAVA_HOME的变量值即可, 否则,你就要更改任何用绝对路径引用JDK目录的文档, 要是万一你没有改全, 某个程序找不到JDK, 后果是可想而知的----系统崩溃!
三、第三方软件会引用约定好的JAVA_HOME变量, 不然, 你将不能正常使用该软件, 以后用JAVA久了就会知道, 要是某个软件不能正常使用, 不妨想想是不是这个问题.
阅读全文
posted @ 2014-05-17 00:47
上校
阅读(314)
推荐(0)
摘要:
运行 javac Server.java 编译java文件
执行 java Server 运行程序
在ie中输入 http://localhost:9999/ 打开模拟的服务程序
import java.net.*;
import java.io.*;
public class Server {
public static void main(String args[]) throws Exception {
System.out.println("start");
ServerSocket server = new ServerSocket(9999);
阅读全文
posted @ 2014-05-17 00:25
上校
阅读(495)
推荐(0)
2014年5月16日
摘要:
很多程序员已经干了一段时间java了依然不明白jdk与jre的区别。
JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。
如果安装了JDK,会发同你的电脑有两套JRE,一套位于 \jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15 目录下,后面这套比前面那套少了Server端的Java虚拟机,不过直接将前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可以选择是否安装这个位于 C:\Program Files\Java 目录下的JRE。如果你只安装JRE,而不是JDK,那么只会在 C:\Program Files\Java 目录下安装唯一的一套JRE。
阅读全文
posted @ 2014-05-16 23:20
上校
阅读(239)
推荐(0)
2014年5月15日
摘要:
导入commons-beanutils-1.8.3.jar及commons-logging-1.1.3.jar
使用commons-beanutils-1.8.3.jar包时需要同时使用commons-logging-1.1.3.jar包,因为需要写日志。
package com.wzh.test.beanutils;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons
阅读全文
posted @ 2014-05-15 23:08
上校
阅读(599)
推荐(0)
2014年5月11日
摘要:
1.解压下载到的struts-2.3.16压缩包。
2.将struts2-blank\WEB-INF\lib 下的jar包复制到Eclipse项目下的libs文件夹下。
3.struts-2.3.16\apps\struts2-blank\WEB-INF\classes目录下的struts.xml文件复制到Eclipse项目下的Src文件夹下。
4.打开struts-2.3.16\apps\struts2-blank\WEB-INF目录下的web.xml文件,将
阅读全文
posted @ 2014-05-11 15:20
上校
阅读(434)
推荐(0)