现在的位置: 首页 > 综合 > 正文

java 线程池

2013年09月08日 ⁄ 综合 ⁄ 共 2322字 ⁄ 字号 评论关闭

    许多时候我们需要用到线程 比如希望一个附加的功能 不要影响整个流程的功能,比如某个流程需要加入日志,但是不希望记录日志的功能影响整个流程的性能,不能因为记录日志把整个流程给卡住了。在这个种情况下,我们需要使用线程。让记录日志在单独一个线程里面跑,就不会影响都其他流程了。

    在很多时候我们还是使用线程池的: 在下面的例子是 在规定的时间内判断数据库是否连接成功。

   一个线程用于连接mysql的类 :

 

   package db;

 

import java.sql.Connection;

import java.sql.Driver;

import java.sql.DriverManager;

import java.util.Properties;

 

public class ConnMysql implements Runnable {

 

private static String connS=null;

public Connection getMysqlConn() {

String mysqlDBDriver = "com.mysql.jdbc.Driver";

String msqlUrl = "jdbc:mysql://203.175.156.78:3306/client";

Connection mysqlConn = null;

try {

 

DriverManager.registerDriver((Driver) Class.forName(mysqlDBDriver).newInstance());

Properties oDbProps1 = new Properties();

oDbProps1.put("user", "root");

oDbProps1.put("password", "root");

mysqlConn = DriverManager.getConnection(msqlUrl, oDbProps1);

 

} catch (Exception e) {

e.printStackTrace();

}

return mysqlConn;

}

 

public void run() {

 

connS=getMysqlConn().toString();

}

 

public static String getConnS() {

return connS;

}

}

另一个线程用于记时的一个类 :
   package db;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class GetTime implements Runnable {
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
private String nowTime = sdf.format(new Date());
private static long disT = 0;
    private static int num = 0;
 
    
public int getShijianchai() {
int between = 0;
try {
Date begin = sdf.parse(nowTime);
Date end = sdf.parse(this.getLastTime());
between = (int) ((end.getTime() - begin.getTime()) / 1000);// 除以1000是为了转换成秒
System.out.println(between + "--------------");
} catch (ParseException e) {
e.printStackTrace();
}
return between;
}
private String getLastTime() {
return sdf.format(new Date());
}
public void run() {
while (true) {
try {
this.getLastTime();
disT = this.getShijianchai();
if(ConnMysql.getConnS()!=null){
System.out.println("连接成功");
num = 1;
break;
}
if (disT > 3) {
num=2;
System.out.println("连接失败");
break;
}
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}
public static void main(String[] agre) {
 
java.util.concurrent.ExecutorService es = java.util.concurrent.Executors.newFixedThreadPool(10);
es.execute(new GetTime());
es.execute(new ConnMysql());
es.shutdown();
System.out.println(">>>>>>>"+new GetTime().getNum());
}
public static long getDisT() {
return disT;
}
public  int getNum() {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return num;
}
}
在main 方法里面用线程池 同时跑两个线程,如果在规定的时间内没有连上mysql ,或者已经连上mysql都会关闭线程。

抱歉!评论已关闭.