Java多線程環(huán)境下SimpleDateFormat類安全轉(zhuǎn)換
更新時間:2020年02月09日 15:03:01 作者:三名狂客
這篇文章主要介紹了Java多線程環(huán)境下SimpleDateFormat類安全轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
一、SimpleDateFormat類
package state;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* SimpleDateFormat類負責(zé)日期的轉(zhuǎn)換與格式化
* 解決SimpleDateFormat類多線程環(huán)境下轉(zhuǎn)換錯誤問題
* @author zc
*
*/
public class SimpleDateFormatThread extends Thread{
private SimpleDateFormat sdf;
private String dateString;
public SimpleDateFormatThread(SimpleDateFormat sdf,String dateString) {
super();
this.sdf =sdf;
this.dateString =dateString;
}
@Override
public void run() {
try {
//System.out.println(dateString);
//剛開始日期格式設(shè)置錯誤為YYYY-MM-dd
Date date =DateTools.getSimpleDateFormat("yyyy-MM-dd").parse(dateString);
// System.out.println(date);
String newDateString =DateTools.getSimpleDateFormat("yyyy-MM-dd").format(date).toString();
if(!newDateString.equals(dateString)) {
System.out.println("ThreadName="+this.getName()+"報錯日期"+dateString+" 轉(zhuǎn)換日期"+newDateString);
}else {
System.out.println("ThreadName="+this.getName()+"日期"+dateString+" 轉(zhuǎn)換日期"+newDateString);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
String[] dateStringArray =new String[]{
"2020-02-05","2020-02-06","2020-02-07","2020-02-08"
};
SimpleDateFormatThread []threadArray= new SimpleDateFormatThread[4];
for(int i=0;i<4;i++) {
threadArray[i] =new SimpleDateFormatThread(sdf,dateStringArray[i]);
}
for(int i=0;i<4;i++) {
threadArray[i].start();
}
}
}
class DateTools{
//ThreadLocal能使線程綁定到指定的對象
private static ThreadLocal<SimpleDateFormat> t = new ThreadLocal<SimpleDateFormat>();
public static SimpleDateFormat getSimpleDateFormat(String datePattern) {
SimpleDateFormat sdf=null;
sdf =t.get();
if(sdf==null) {
sdf =new SimpleDateFormat(datePattern);
t.set(sdf);
}
return sdf;
}
}
二、線程狀態(tài)和線程組
(2)線程5狀態(tài)
//NEW 尚未啟動的線程
//RUNNABLE Java虛擬機中執(zhí)行的線程
//TERMINATED 已經(jīng)退出的線程
//BLOCKED 阻塞受監(jiān)視的線程
//WAITING 無限等待另一個線程
//TIMED_WAITING 等待另一個線程指定時間
package state;
/**
* 線程中狀態(tài)和線程組
* @author zc
*
*/
public class MyThread extends Thread{
//NEW
//RUNNABLE
//TERMINATED
//BLOCKED
//WAITING
//TIMED_WAITING
public MyThread() {
System.out.println("構(gòu)造方法中的狀態(tài): "+Thread.currentThread().getState());
}
@Override
public void run() {
System.out.println("run方法中的狀態(tài):"+Thread.currentThread().getState());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
System.out.println("main方法中的狀態(tài)1 "+ myThread.getState());
Thread t1 = new Thread();
Thread t2 = new Thread();
ThreadGroup group =new ThreadGroup("左氏線程組");
Thread t3 = new Thread(group,t1);
Thread t4 = new Thread(group,t2);
t3.start();
t4.start();
System.out.println("活動的線程數(shù)量為: " +group.activeCount());
System.out.println("線程組的名稱為: "+group.getName());
try {
myThread.start();
Thread.sleep(1000);
System.out.println("main方法中的狀態(tài)2 "+ myThread.getState());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
SpringBoot中yml的數(shù)據(jù)綁定示例
本文主要介紹了SpringBoot中yml的數(shù)據(jù)綁定示例,借助于YAML的簡潔語法和結(jié)構(gòu)化特性,我們能夠輕松地管理應(yīng)用程序的配置信息,使得配置文件更加清晰易讀,感興趣的可以了解一下2023-11-11
SpringCloud OpenFeign基本介紹與實現(xiàn)示例
OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡(luò)通信的細節(jié),直接面向接口的方式開發(fā),讓開發(fā)者感知不到網(wǎng)絡(luò)通信細節(jié)。所有遠程調(diào)用,都像調(diào)用本地方法一樣完成2023-02-02
Java中Base64和File之間互轉(zhuǎn)代碼示例
這篇文章主要給大家介紹了關(guān)于Java中Base64和File之間互轉(zhuǎn)的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進制數(shù)據(jù)的方法,需要的朋友可以參考下2023-08-08

