当前位置: 移动技术网 > IT编程>开发语言>Java > Java多线程继承Thread类详解第1/2页

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

调用方法:

/**
 * 点击量/月(年)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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网