一個多執行緒的PushbackInputStream問題
最近在更改以前老專案的程式碼,出了一個問題,
一部分程式碼:
class mythread extends Thread{
/**
被start()方法呼叫的主執行緒方法.
**/
public void run()
{
dbwr();
}
/**
該方法完成讀檔案,分析檔案,插庫,刪除檔案等全部功能.被執行緒主方法run()呼叫.
**/
public synchronized void dbwr()
{
// File news = new File("./store/");
/**
讀入(./store/)路徑
**/
//File news = new File("./store/");
File news = new File("f:/store/");
/**
存放所讀的檔案物件.
**/
File arry[];
arry=news.listFiles();
int delete_i=0;
try{
if(arry.length<1){
this.sleep(60000);
sernews.insertthread();
this.stop();this.destroy();
}
this.sleep(1000);
/**
一個用於判斷檔案是否結束的位元組,如果結束,會自動返回-1.
**/
byte temp[]=new byte[1];
/**
讀入沒條新聞的分類個數.
**/
byte class_total[]=new byte[4];
/**
讀入新聞類別.
**/
byte class_id[]=new byte[4];
/**
新聞的日期.
**/
byte news_date[]=new byte[4];
/**
新聞時間
**/
byte news_time[]=new byte[4];
/**
新聞標題的長度.
**/
byte title_total[]=new byte[4];
/**
新聞標題
**/
byte news_title[]=new byte[1024];
/**
新聞內容
**/
byte news_content[]=new byte[653600];
/**
新聞ID號,每條新聞去當前資料庫中最大的ID號.
**/
long news_id=0;
for(int i=0;i<arry.length;i++){
delete_i=i;
System.out.print("檔名: "+arry.getName());
if(!arry.isFile()){
arry.delete();
continue;
}
if(arry.length()<40){
System.out.println("非法檔案, 被刪除!");
arry.delete();
continue;
}
/**
把當前的檔案檔案流的形式開啟.
**/
FileInputStream inputfile=new FileInputStream(arry);
/**
把檔案流例項化成一個反壓流.
反壓流---該流的指標能隨檔案的讀入而移動.而且能夠返回以讀完的流的指標向量.
**/
PushbackInputStream readfile=new PushbackInputStream(inputfile,653600);
readfile.read(class_total,0,4);
int class_total_l=toInt(class_total);
if(class_total_l>10){
inputfile.close();
readfile.close();
// readfile.unread(class_total,0,4);
System.out.println("非法檔案, 被刪除!");
arry.delete();
continue;
}
/**
用於儲存資料庫的連結串,分別是hostname,port,SID,username,password.
**/
Class.forName("oracle.jdbc.driver.OracleDriver");
/**
建立JDBC的連線.
**/
Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@"+sernews.jdbcdrive,sernews.username,sernews.psw);
// Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@e5500:1521:ora815","xc","xc");
//Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@172.20.83.170:1521:ora9i","xc","xc");
conn.setAutoCommit(false);
/**
JDBC宣告.
**/
Statement stmt = conn.createStatement();
/**
JDBC返回結果集.
**/
ResultSet result = stmt.executeQuery("select max(news_id) from t_news_class_1");
if(result.next()){
news_id=result.getLong(1);
news_id=news_id+1;
}
int class_id_l;
for(int j=0;j<class_total_l;j++){
readfile.read(class_id,0,4);
class_id_l=toInt(class_id);
stmt.execute("insert into t_news_class_1(news_id,news_class_id) values("+news_id+","+class_id_l+")");
// stmt.execute("insert into t_news_class_1_all(news_id,news_class_id) values("+news_id+","+class_id_l+")");
}
readfile.read(news_date,0,4);
/**
把位元組型的日期轉換成一個整形的數值.
**/
int lDate_value=toInt(news_date);
readfile.read(news_time,0,4);
/**
把位元組型的時間轉換成一個整形的數值.
**/
int lTime_value=toInt(news_time);
/**
把整型的日期轉換成一個字元.
**/
String sundate=String.valueOf(lDate_value);
/**
把整型的時間轉換成一個字元.
**/
String suntime=String.valueOf(lTime_value);
int len=suntime.length();
if(len<6)
{
for(int j=0;j<(6-len);j++)
suntime="0"+suntime;
}
一部分程式碼:
class mythread extends Thread{
/**
被start()方法呼叫的主執行緒方法.
**/
public void run()
{
dbwr();
}
/**
該方法完成讀檔案,分析檔案,插庫,刪除檔案等全部功能.被執行緒主方法run()呼叫.
**/
public synchronized void dbwr()
{
// File news = new File("./store/");
/**
讀入(./store/)路徑
**/
//File news = new File("./store/");
File news = new File("f:/store/");
/**
存放所讀的檔案物件.
**/
File arry[];
arry=news.listFiles();
int delete_i=0;
try{
if(arry.length<1){
this.sleep(60000);
sernews.insertthread();
this.stop();this.destroy();
}
this.sleep(1000);
/**
一個用於判斷檔案是否結束的位元組,如果結束,會自動返回-1.
**/
byte temp[]=new byte[1];
/**
讀入沒條新聞的分類個數.
**/
byte class_total[]=new byte[4];
/**
讀入新聞類別.
**/
byte class_id[]=new byte[4];
/**
新聞的日期.
**/
byte news_date[]=new byte[4];
/**
新聞時間
**/
byte news_time[]=new byte[4];
/**
新聞標題的長度.
**/
byte title_total[]=new byte[4];
/**
新聞標題
**/
byte news_title[]=new byte[1024];
/**
新聞內容
**/
byte news_content[]=new byte[653600];
/**
新聞ID號,每條新聞去當前資料庫中最大的ID號.
**/
long news_id=0;
for(int i=0;i<arry.length;i++){
delete_i=i;
System.out.print("檔名: "+arry.getName());
if(!arry.isFile()){
arry.delete();
continue;
}
if(arry.length()<40){
System.out.println("非法檔案, 被刪除!");
arry.delete();
continue;
}
/**
把當前的檔案檔案流的形式開啟.
**/
FileInputStream inputfile=new FileInputStream(arry);
/**
把檔案流例項化成一個反壓流.
反壓流---該流的指標能隨檔案的讀入而移動.而且能夠返回以讀完的流的指標向量.
**/
PushbackInputStream readfile=new PushbackInputStream(inputfile,653600);
readfile.read(class_total,0,4);
int class_total_l=toInt(class_total);
if(class_total_l>10){
inputfile.close();
readfile.close();
// readfile.unread(class_total,0,4);
System.out.println("非法檔案, 被刪除!");
arry.delete();
continue;
}
/**
用於儲存資料庫的連結串,分別是hostname,port,SID,username,password.
**/
Class.forName("oracle.jdbc.driver.OracleDriver");
/**
建立JDBC的連線.
**/
Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@"+sernews.jdbcdrive,sernews.username,sernews.psw);
// Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@e5500:1521:ora815","xc","xc");
//Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@172.20.83.170:1521:ora9i","xc","xc");
conn.setAutoCommit(false);
/**
JDBC宣告.
**/
Statement stmt = conn.createStatement();
/**
JDBC返回結果集.
**/
ResultSet result = stmt.executeQuery("select max(news_id) from t_news_class_1");
if(result.next()){
news_id=result.getLong(1);
news_id=news_id+1;
}
int class_id_l;
for(int j=0;j<class_total_l;j++){
readfile.read(class_id,0,4);
class_id_l=toInt(class_id);
stmt.execute("insert into t_news_class_1(news_id,news_class_id) values("+news_id+","+class_id_l+")");
// stmt.execute("insert into t_news_class_1_all(news_id,news_class_id) values("+news_id+","+class_id_l+")");
}
readfile.read(news_date,0,4);
/**
把位元組型的日期轉換成一個整形的數值.
**/
int lDate_value=toInt(news_date);
readfile.read(news_time,0,4);
/**
把位元組型的時間轉換成一個整形的數值.
**/
int lTime_value=toInt(news_time);
/**
把整型的日期轉換成一個字元.
**/
String sundate=String.valueOf(lDate_value);
/**
把整型的時間轉換成一個字元.
**/
String suntime=String.valueOf(lTime_value);
int len=suntime.length();
if(len<6)
{
for(int j=0;j<(6-len);j++)
suntime="0"+suntime;
}
相關文章
- 請教一個多執行緒的問題執行緒
- 請教一個多執行緒的問題--wait多個鎖執行緒AI
- 請教一個事務+多執行緒 的問題執行緒
- 多執行緒問題執行緒
- java多執行緒執行問題Java執行緒
- 多執行緒鎖的問題執行緒
- Java NIO 執行緒 的一個問題Java執行緒
- 問一個守護執行緒問題?執行緒
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- 40 個 Java 多執行緒問題總結Java執行緒
- 40個Java多執行緒問題總結Java執行緒
- 多個執行緒順序列印問題,一網打盡執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 有個關於多執行緒的識別問題執行緒
- 請教一個多執行緒編寫的題!執行緒
- 多執行緒問題解釋執行緒
- 多執行緒相關問題執行緒
- Hibernate 多執行緒問題!執行緒
- 多執行緒-多執行緒常見的面試題執行緒面試題
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 多執行緒引起的效能問題分析執行緒
- seam中使用多執行緒的問題執行緒
- java多執行緒問題 多核cpu遇上java多執行緒,求解釋Java執行緒
- 請教一個關於執行緒的問題執行緒
- 多執行緒之8鎖問題執行緒
- 05.java多執行緒問題Java執行緒
- 多執行緒下的程式同步(執行緒同步問題總結篇)執行緒
- 面試系列-40個Java多執行緒問題總結面試Java執行緒
- 【java 多執行緒】多執行緒併發同步問題及解決方法Java執行緒
- 多執行緒下聚合的一致性問題執行緒
- 多執行緒訪問—限制某個方法只執行一次執行緒
- 15個Java多執行緒面試題Java執行緒面試題
- 50個Java多執行緒面試題Java執行緒面試題
- BATJ都愛問的多執行緒面試題BAT執行緒面試題
- 多執行緒的安全性問題(三)執行緒
- objective-c 多執行緒注意的問題Object執行緒
- 最常見的15個Java多執行緒,併發面試問題Java執行緒面試
- 多執行緒-執行緒安全問題的產生原因分析以及同步程式碼塊的方式解決執行緒安全問題執行緒