Java多线程之notifyAll的作用域
摘要:notifyAll()因某个特定锁而被调用时,只有等待这个锁的任务才会被唤醒。
package Thread.Wait;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Blocker {
synchronized void waitingCall() {
try {
阅读全文
posted @
2014-05-29 00:13
上校
阅读(984)
推荐(0) 编辑
Java多线程之Wait()和Notify()
摘要:1.Wait()和Notify、NotifyAll都是Object的方法
2.多线程的协作是通过控制同一个对象的Wait()和Notify()完成
3.当调用Wait()方法时,当前线程进入阻塞状态,直到有另一线程调用了该对象的Notify()方法
package Thread.Wait;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
class Car {
private boolean waxOn = false;
阅读全文
posted @
2014-05-28 22:33
上校
阅读(819)
推荐(0) 编辑
Java多线程之线程结束清理
摘要:该事例说明了清理工作必须要放在finally块中
package Thread.Interrupting;
import java.util.concurrent.TimeUnit;
class NeedsCleanup {
private final int id;
public NeedsCleanup(int ident) {
id = ident;
System.out.println("NeedsCleanup " + id);
}
public void cleanup() {
System.out.println("Cleaning up " + id);
}
}
阅读全文
posted @
2014-05-28 00:10
上校
阅读(8622)
推荐(0) 编辑
Java多线程之阻塞I/O如何中断
摘要:阻塞的I/O线程不会被打断,需要关闭资源才能打断
package Thread.Interrupting;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
阅读全文
posted @
2014-05-27 23:08
上校
阅读(12091)
推荐(1) 编辑
Java多线程之线程中断
摘要:该例子说明,Sleep可以被中断,但是I/O和synchronized不能被中断。
package Thread.Interrupting;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
阅读全文
posted @
2014-05-27 22:14
上校
阅读(496)
推荐(0) 编辑
java多线程之计算数量
摘要:package Thread.Abort;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
//计数类
class Count {//DATA
private int count = 0;
private Random rand = new Random(47);
//
public synchronized int increment() {
int temp = count;
if (rand.nextBoolean())
Thread.yield();
return (count = ++te
阅读全文
posted @
2014-05-27 20:50
上校
阅读(9133)
推荐(0) 编辑
深入研究java.lang.ThreadLocal类(转)
摘要:引用:http://lavasoft.blog.51cto.com/62575/51926/
一、概述
ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。
从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)。
阅读全文
posted @
2014-05-27 00:27
上校
阅读(297)
推荐(1) 编辑
java多线程之ThreadLocal
摘要: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
上校
阅读(673)
推荐(0) 编辑
java多线程之AtomicInteger
摘要: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
上校
阅读(6595)
推荐(0) 编辑
Java多线程之简单的线程同步实例
摘要:数据类:
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
上校
阅读(8831)
推荐(0) 编辑
Java多线程之捕获异常
摘要: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
上校
阅读(13376)
推荐(0) 编辑
Java多线程之join
摘要:将另外一个线程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
上校
阅读(6725)
推荐(0) 编辑
Java多线程之后台线程不执行finally
摘要:后台线程不执行finally
package wzh.daemon;
import java.util.concurrent.TimeUnit;
class ADaemon implements Runnable {
@Override
public void run() {
阅读全文
posted @
2014-05-25 13:42
上校
阅读(3196)
推荐(0) 编辑
Java多线程之DaemonThreadFactory
摘要:通过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
上校
阅读(3186)
推荐(0) 编辑
Java多线程之后台线程
摘要:将线程设置成后台线程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
上校
阅读(1307)
推荐(0) 编辑
java多线程之从任务中获取返回值
摘要: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
上校
阅读(1898)
推荐(0) 编辑
java多线程总结
摘要:原文:http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。
对于直接继承Thread的类来说,代码大致框架是:
阅读全文
posted @
2014-05-25 09:46
上校
阅读(484)
推荐(1) 编辑
java之生产者与消费者
摘要: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
上校
阅读(1656)
推荐(0) 编辑
java中的IO整理
摘要:写在前面:本文章基本覆盖了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
上校
阅读(593)
推荐(0) 编辑
JAVA集合小结
摘要: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
上校
阅读(1589)
推荐(0) 编辑
java内部类的作用分析
摘要:提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦。学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地设计你的程序结构。下面从以下几个方面来介绍:
阅读全文
posted @
2014-05-22 20:41
上校
阅读(908)
推荐(0) 编辑
如何使用javadoc
摘要: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
上校
阅读(1907)
推荐(0) 编辑
30天轻松学习javaweb_Eclipse在修改了web.xml后将自动更新到tomcat服务器中
摘要: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
上校
阅读(1546)
推荐(0) 编辑
30天轻松学习javaweb_修改tomcat的servlet模板
摘要:在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
上校
阅读(269)
推荐(0) 编辑
30天轻松学习javaweb_通过javac编译java文件
摘要:通过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
上校
阅读(222)
推荐(0) 编辑
30天轻松学习javaweb_http头信息实例
摘要: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
上校
阅读(270)
推荐(0) 编辑
30天轻松学习javaweb_通过telnet连接http服务器
摘要: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
上校
阅读(396)
推荐(0) 编辑
30天轻松学习javaweb_https协议的密码学
摘要:https通过非对称加密实现数据安全
1.CA机构提供数字证书,其中数字证书包含公钥。
2.浏览器自带功能验证数字证书是否是CA机构颁发的。
3.根据数字证书包含的公钥对表单数据进行加密。
4.公钥提供方再根据自己的私钥对数据进行解密。
阅读全文
posted @
2014-05-19 00:40
上校
阅读(262)
推荐(0) 编辑
30天轻松学习javaweb_打包web项目成war
摘要:jar -cvf news.war news
打包成 war 包后复制到webapps下,Tomcat将会解压。
阅读全文
posted @
2014-05-18 20:35
上校
阅读(227)
推荐(0) 编辑
30天轻松学习javaweb_tomcat的虚拟目录设置
摘要:1.在server.xml文件的前面加入。需要重新启动Tomcat才能生效。
如果是
将覆盖成缺省目录,则路径是 http://localhost:8080/1.html
http://localhost:8080/ 下原来的Tomcat主页将被覆盖。
2.在conf\Catalina\localhost目录下放入
阅读全文
posted @
2014-05-17 23:36
上校
阅读(265)
推荐(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
上校
阅读(1976)
推荐(0) 编辑
JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。
摘要:以下为置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
上校
阅读(310)
推荐(0) 编辑
30天轻松学习javaweb_模拟tomcat
摘要:运行 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
上校
阅读(488)
推荐(0) 编辑
jdk与jre的区别
摘要:很多程序员已经干了一段时间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
上校
阅读(234)
推荐(0) 编辑
30天轻松掌握JavaWeb_使用beanutils
摘要:导入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
上校
阅读(594)
推荐(0) 编辑
如何搭建Struts2环境
摘要: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
上校
阅读(431)
推荐(0) 编辑
Eclipse Tomcat配置/管理/调试指南
摘要:从myeclipse转到Eclipse最不方便的之一莫过于Web项目部署了,老是在想怎么不能把myeclipse的那个移植过来,或者有没有高人能按照Myeclipse开发一个,非常遗憾。
原版的Eclipse自带WTP,WTP本身的Web应用服务器管理功能还可以,但有些复杂。
要想把它用顺手,还要花点时间来学习一下。学会后还算方便的。
目前还未找到十分好用的Eclipse下的管理Tomcat的插件。
有一个老处于插件TomcatPlugin V321,只能管理一个Tomcat,数量
阅读全文
posted @
2014-05-02 08:04
上校
阅读(7219)
推荐(0) 编辑
eclipse中安装tomcat插件
摘要:一、软件下载
Eclipse3.6 IDE for Java EE Developers: 下载地址:http://eclipse.org/downloads/
Tomcat Eclipse Plugin, 下载地址:http://www.eclipsetotale.com/tomcatPlugin.html
二、软件安装和配置(图文)
1.解压Eclipse到某个目录,例如/usr/local/eclipse 即可。
2. 解压Tomcat 插件到eclipse目录下的plugins目录中。
阅读全文
posted @
2014-05-01 20:53
上校
阅读(2393)
推荐(0) 编辑