java创建线程的两个方法

本文介绍了Java中创建线程的两种主要方式:继承Thread类和实现Runnable接口,并通过示例展示了具体的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方式一:

    在java中创建线程的一种方式是通过Thread来实现的.Thread有很多个构造器来创建一个线程(Thread)实例:

    public class TestThread extends Thread{

        public void run(){

             for(int i=0;i<100;i++)

                  System.out.println("Count:"+i);

        }

        public static void main(String[] args){

             TestThread tt=new TestThread();

             tt.start();

        }

     }

方式二:

    通过实现Runnable接口并实现接口中这义的唯一方法run(),可以创建一个线程.

    public class RunnableThread implements Runnable{

        public void run(){

              for(int k=0;k<100;k++)

                  System.out.println("Count:"+k);

        }

       public static void main(String[] args){

             RunnableThread rt=new RunnableThread ();

             Thread t=new Thread(rt);

             rt.start();

        }

     }

具体运用:(开的流程)

package com.sodo.crm.action;

import java.io.File;

 

import com.sodo.core.utils.Url2Jpg;

public class CrmPictureThread extends Thread {
 public CrmPictureThread(String url,String userId,String reportAnnualReportId,File file,String str){
  this.url=url;
  this.userId=userId;
  this.reportAnnualReportId=reportAnnualReportId;
  this.file=file;
  this.str=str;
 }
 public CrmPictureThread(String url,String userId,String reportAnnualReportId,String concluseionid,File file,String str){
  this.url=url;
  this.userId=userId;
  this.reportAnnualReportId=reportAnnualReportId;
  this.file=file;
  this.str=str;
  this.concluseionid=concluseionid;
 }
 public String concluseionid;
 
 public String getConcluseionid() {
  return concluseionid;
 }
 public void setConcluseionid(String concluseionid) {
  this.concluseionid = concluseionid;
 }
 public String str;
 
 public String getStr() {
  return str;
 }
 public void setStr(String str) {
  this.str = str;
 }
 public File file;
 
 public File getFile() {
  return file;
 }
 public void setFile(File file) {
  this.file = file;
 }
 private Object obj;
 
 public Object getObj() {
  return obj;
 }
 public void setObj(Object obj) {
  this.obj = obj;
 }
 private String url;
 private String userId;
 
 public String getUserId() {
  return userId;
 }

 public void setUserId(String userId) {
  this.userId = userId;
 }
 private String reportAnnualReportId;
 
 public String getUrl() {
  return url;
 }

 public void setUrl(String url) {
  this.url = url;
 }

 public String getReportAnnualReportId() {
  return reportAnnualReportId;
 }

 public void setReportAnnualReportId(String reportAnnualReportId) {
  this.reportAnnualReportId = reportAnnualReportId;
 }

 public void run(){
   String url  = this.getUrl();
   String reportAnnualReportId=getReportAnnualReportId();
  String filePath = file+this.userId+reportAnnualReportId+".jpg";
  File files = new File(this.file+this.userId+reportAnnualReportId+".jpg");
  if(files.exists()){
  files.delete(); 
  }
  
  if(this.str.equals("LDZCSB")){
   String[] pictureUrl=url.split("_");
  String newPicUrl=pictureUrl[0]+"_getSerfAnnualReportId.do?serfAnnualReportId="+reportAnnualReportId;
  try {
   new Url2Jpg(newPicUrl, new File(filePath)).producePic();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }else if(this.str.equals("ZTZRQKZCB")){
   String[] pictureUrl=url.split("/");
   String newPicUrl=pictureUrl[0]+"//"+pictureUrl[2]+"/"+pictureUrl[3]+"/"+pictureUrl[4]+"/"+"psel_showDate.do?id="+reportAnnualReportId;
   try {
    new Url2Jpg(newPicUrl, new File(filePath)).producePic();
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
 }
 
}
(调用流程)

public String showPic()throws Exception{
   User user=(User)contextPvd.getSessionAttr("_userInfo");
  HttpServletRequest request=contextPvd.getRequest();
  String str="LDZCSB";
  File file = new File(request.getSession().getServletContext().getRealPath("resource/pic")+File.separator+str);
  Thread t = new CrmPictureThread(url,user.getAdOrgId().toString(),reportAnnualReportId,file,str);
  
  request.setAttribute("reportAnnualReportId", reportAnnualReportId);
   
  t.start();
   return list();
   
 }

两种方式的区别:

●   使用Runnable接口

   可以将CPU,代码和数据分开,形成清晰的模型;

   还可以从其他类继承;

   保持程序风格的一致性.

●   直接继承Thread类

   不能再从其他类继承;

   编写简单,可以直接操纵线程,无需使用Thread,currentThread().

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值