Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 314|回复: 0

[默认分类] java Thread两种简单用法总结

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-6-1 11:31:45 | 显示全部楼层 |阅读模式
    方法一: 用继承Thread实现
    实例:



    代码
      
      
       
       package
        threadtest13;

       //
       多线程的写法2,用两种情况变换,

       //
       情况1:新建一个对象,两个线程共享一个对象。另外是新建两个对象,两个线程用两个对象

       //
       情况2:int i=0;拿到run()外面与在run()里面两种情况
       。
    //上面4种情况可以排列组合试一下

       public
       class
        Thread13 {


       public
       static
       void
        main(String args[]){
    MyThread myThread
       =
       new
        MyThread();


       //
        MyThread myThread2= new MyThread();
       //
       2
       

       
    Thread t1
       =
       new
        Thread(myThread);
    Thread t2
       =
       new
        Thread(myThread);

       //
       Thread t2= new Thread(myThread2);
       //
       2
       

       t1.start();
    t2.start();
    }

    }


       class
        MyThread
       extends
        Thread {

       //
        int i=0;
       //
       1
       

       public
       void
        run() {
    String name
       =
        Thread.currentThread().getName();
    String inf
       =
       Thread.currentThread().toString();

       long
        idnum
       =
        Thread.currentThread().getId();

       for
       (
       int
        i
       =
       0
       ;i
       <
       10
       ;i
       ++
       ){
       //
       不管是新建一个对象,还是两个对象,
       //
       2,都是打印20个数据

       //
        for(;i<10;i++){
       //
       新建一个对象的时候,打印11个左右的数据 ,新建两个对象的时候,
       //
       2,会打印20个数据。
       //
       1
       

       System.out.println(
       "
       i----------
       "
       +
       i
       +
       "
       ,thread name==
       "
       +
        name

       +
       "
       ,threadid==
       "
       +
        idnum
       +
       "
       ,thread inf==
       "
       +
       inf);
    }
    }
    }





       
      

      
    实例:
      


      
      package
       com.thread.test;


      public
      class
       ThreadTest
      extends
       Thread {

      public
       ThreadTest(String str){
      //
      用构造函数控制线程的名字,如果不写,默认是thread-整数
      

      super
      (str);
    }

    @Override

      public
      void
       run() {

      synchronized
      (
      this
      ){

      for
      (
      int
       i
      =
      0
      ;i
      <
      10
      ;i
      ++
      ){
      //
      控制run的内部这些东西执行的次数,不加这句,run只执行一次。
      

      System.out.println(i
      +
      getName());

      try
       {
    sleep((
      long
      )(Math.random()
      *
      1000
      ));
    }
      catch
       (InterruptedException e) {

      //
       TODO Auto-generated catch block
      

      e.printStackTrace();
    }

    }

      //
      for循环结束
      

      System.out.println(
      "
      for循环结束
      "
      +
      getName());
    }


      super
      .run();
    }


      /*
      
    * 此方法可添加也可以不填加,start都能够调用。
    * @Override
    public synchronized void start() {
    // TODO Auto-generated method stub
    super.start();
    }
      */
      



      public
      static
      void
       main(String args[]){

      new
       ThreadTest(
      "
      su
      "
      ).start();

      new
       ThreadTest(
      "
      zhu
      "
      ).start();

    }
    }

      

      



      
    上面方法两个线程不能同步。
    方法二:用“实现”Runnable方法实现
    实例:



    代码
      
      
       
       package
        threadtest12;

       //
       多线程的写法1
       

       public
       class
        Thread12 {


       public
       static
       void
        main(String args[]) {
    MyThread myThread
       =
       new
        MyThread();

       //
       myThread.run();

       //
       把这个MyThread包装称为Thread
       

       Thread t1
       =
       new
        Thread(myThread);
    Thread t2
       =
       new
        Thread(myThread);
    t1.start();
    t2.start();

    }

    }


       class
        MyThread
       implements
        Runnable {

    @Override

       public
       void
        run() {

       //
        TODO Auto-generated method stub
       

       String name
       =
        Thread.currentThread().getName();
    String inf
       =
       Thread.currentThread().toString();

       long
        idnum
       =
        Thread.currentThread().getId();

       for
       (
       int
        i
       =
       0
       ;i
       <
       10
       ;i
       ++
       ){
    System.out.println(
       "
       aaaaa----------
       "
       +
       "
       ,thread name==
       "
       +
        name

       +
       "
       ,threadid==
       "
       +
        idnum
       +
       "
       ,thread inf==
       "
       +
       inf);
    }
    }

    }

       
      

      
    两个共享一个thread对象,并发调用,20条数据
      
      
    实例:
      


      
      /*
      
    *
    *
    * 这段代码用实现接口来做
    * 可以让类extends继承其他类
      */
      


      package
       com.thread.test1;


      public
      class
       ThreadTest1
      implements
       Runnable{
    String threadName;


      public
       ThreadTest1(String str){
    threadName
      =
      str;
    }

    @Override

      public
      void
       run() {

      //
       TODO Auto-generated method stub
      

      for
      (
      int
       i
      =
      0
      ;i
      <
      10
      ;i
      ++
      ){
    System.out.println(
      "
      执行第
      "
      +
      i);

      try
       {
    Thread.sleep(
      1000
      );
    }
      catch
       (InterruptedException e) {

      //
       TODO Auto-generated catch block
      

      e.printStackTrace();
    }

      //
      System.out.println("执行完第"+i);
      

      }
    System.out.println(
      "
      结束
      "
      );
    }


      public
      static
      void
       main(String[] args){

      /*
      
    * 这段跟下面的作用是一样的。。。new的ThreadTest1的对象不能调用start方法
    * ThreadTest1 threadTest1=new ThreadTest1("h");
    Thread thread1=new Thread(threadTest1);
    thread1.start();
      */
      


      new
       Thread(
      new
       ThreadTest1(
      "
      su
      "
      )).start();
    }

    }



      

      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-4-20 01:36 , Processed in 0.355916 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表