欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java多线程继承Thread类详解第1/2页

程序员文章站 2024-03-12 21:19:32
调用方法: /** * 点击量/月(年)thread */ public void yearlyclickthread() { // 获取参数...

调用方法:

/**
 * 点击量/月(年)thread
 */
 public void yearlyclickthread() {
 // 获取参数
 string year = getpara("year");
 // 统计数据集x
 list<string> xlist = new arraylist<string>();
 xlist.add("january");
 xlist.add("february");
 xlist.add("march");
 xlist.add("april");
 xlist.add("may");
 xlist.add("june");
 xlist.add("july");
 xlist.add("august");
 xlist.add("september");
 xlist.add("october");
 xlist.add("november");
 xlist.add("december");
 // 统计数据集y
 list<integer> ylist = new arraylist<integer>();
 // 统计线程状态
 list<thread> threadlist = new arraylist<thread>();
 // 线程状态码
 int threadstatuscode = 0;
 // 计数器
 int count = 0;
 // 每月的日志分析
 for (int m = 1; m <= 12; m++) {
 // 收集日期参数
 list<string> datelist = new arraylist<string>();
 //
 string date = "";
 // 判断有多少天
 int days = calendarutil.weekformonth(integer.valueof(year), m);
 // 组合日期
 for (int i = 1; i <= days; i++) {

 if (i <= 9) {

  if (m <= 9) {
  date = year + "-0" + m + "-0" + i;
  } else {
  date = year + "-" + m + "-0" + i;
  }
 } else {
  if (m <= 9) {
  date = year + "-0" + m + "-" + i;
  } else {
  date = year + "-" + m + "-" + i;
  }
 }
 datelist.add(date);
 }
 // 启动线程
 thread thread = new readlogfilethreadbyyear(datelist);
 thread.start();
 try {
 // 休眠
 thread.sleep(1000l);
 } catch (interruptedexception e) {
 e.printstacktrace();
 }
 threadlist.add(thread);
 }
 // 获取线程状态
 for (thread t : threadlist) {
 if (t.getstate().tostring().equals("terminated")) {
 threadstatuscode += 1;
 }
 }
 // 判断线程是否都执行完毕
 if (threadstatuscode == 12) {
 // 接收参数
 // list<map<string, object>> list = readlogfilethread.list.sublist(0, 12);
 list<map<string, object>> list = readlogfilethreadbyyear.list;
 // 设置参数
 for (int p = 0; p < list.size(); p++) {

 count += (int) list.get(p).get("clickcount");

 if (list.get(p).get("month").equals("01")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("02")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("03")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("04")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("05")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("06")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("07")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("08")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("09")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("10")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("11")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 } else if (list.get(p).get("month").equals("12")) {
  ylist.add((integer) list.get(p).get("clickcount"));
 }

 }
 }
 
 setattr("totalcount", count);
 setattr("x", xlist);
 setattr("y", ylist);
 renderjson();
 }

线程方法:

package com.ninemax.util.loganalysis;

import java.io.bufferedreader;
import java.io.file;
import java.io.fileinputstream;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.util.arraylist;
import java.util.hashmap;
import java.util.list;
import java.util.map;

import com.ninemax.util.loganalysis.tool.constantutil;

/**
 * 多线程无返回值
 * 
 * @author darker
 *
 */
public class readlogfilethreadbyyear extends thread {
 // 日期数组
 private list<string> clickdate;
 // 共享数据
 public static list<map<string, object>> list = new arraylist<map<string, object>>();
 
 public readlogfilethreadbyyear(list<string> clickdate) {
 this.clickdate = clickdate;
 }

 /**
 * 读取点击日志文件
 * 
 * 例子:article.click.2016-05-20.txt
 * 
 * @return
 */
 public void run() {
 // 接收参数
 map<string, object> map = new hashmap<string, object>();
 // 利用fileinputstream读取文件信息
 fileinputstream fis = null;
 // 利用inputstreamreader进行转码
 inputstreamreader reader = null;
 // 利用bufferedreader进行缓冲
 bufferedreader bufreader = null;
 // 利用stringbuffer接收文件内容容器
 stringbuffer buf = new stringbuffer();
 // 点击量/月
 int monthclick = 0;
 
 for (int i = 0; i < clickdate.size(); i++) {
 // 获取文件
 file clicklogfile = new file(constantutil.loglocation, "article.click."+ clickdate.get(i) + ".txt");
 // 判断文件是否存在
 if (!clicklogfile.exists() || clicklogfile.isdirectory()) {

 system.err.println(clickdate.get(i) + "的文件不存在...");
 } else {
 try {
  // 节点流
  fis = new fileinputstream(clicklogfile);
  // 转换流
  reader = new inputstreamreader(fis, "utf-8");
  // 处理流
  bufreader = new bufferedreader(reader);
  // 计数器
  int count = 0;
  // 按行读取
  string line = "";
  // 读取文件
  while ((line = bufreader.readline()) != null) {
  count++;
  // 接收数据
  if (!line.equals(null) && !line.equals("")) {

  buf.append(line + "\n");
  }
  }
  if (count == 0) {
  count = 0;
  } else {
  count = count - 1;
  }
  monthclick += count;
 } catch (exception e) {
  e.printstacktrace();
 } finally {
  // 关闭流
  try {
  bufreader.close();
  reader.close();
  fis.close();
  } catch (ioexception e) {
  e.printstacktrace();
  }
 }
 }
 }
 map.put("month", clickdate.get(0).subsequence(5, 7));
 if(monthclick==0){
 map.put("clickcount", 0);
 }else{
 map.put("clickcount", monthclick);
 }
 
 // map.put("clickcontent", buf.tostring());
 list.add(map);

 }
 
}
1