先看一下java线程运行时各个阶段的运行状态


java实现多线程有两种方法
1、继承Thread类
2、实现Runnable接口
这两种方法的 共同点
不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法
两种方法的 不同点
1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承
2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性

基于以上两点所以建议用第二种方法

下面用例子来做说明
程序1:
 
package  com.dr.runnable1;
// 一个类只要继承了Thread类,则此类就是多线程类
class  MyThread  extends  Thread
{
    
private String name;
    
public MyThread(String name)
    
{
        
this.name=name;
    }

    
//如果要使用多线程,则必须有一个方法的主体
    public void run()
    
{
        
//打印输出
        for(int i=0;i<10;i++)
        
{
            System.out.println(
this.name+"----->运行、、、、");
        }

    }

}

public   class  Demo1  {
    
public static void main(String args[])
    
{

//第一种方法
         Runnable r1=new MyThread("线程A");
        Runnable r2
=new MyThread("线程B");
        Runnable r3
=new MyThread("线程C");
       Thread t1
=new Thread(r1);
       Thread t2
=new Thread(r2);
       Thread t3
=new Thread(r3);
       t1.start();
       t2.start();
       t3.start();

  
//        mt1.run();//线程执行,使用start方法
//        mt2.run();
//        mt3.run();

//第二种方法

//       MyThread mt1=new MyThread("线程A");
//        MyThread mt2=new MyThread("线程B");
//        MyThread mt3=new MyThread("线程C");
//        mt1.start();
//        mt1.start();//线程只能启动一次
//        mt2.start();
//        mt3.start(); 

    }
 

}
 

程序的运行结果是:
这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程
第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程
程序2:
 
package  com.dr.runnable1;
class  MyThread1  implements  Runnable
{
    
private  int ticket=10;
    
public void run()
    
{
        
for(int i=0;i<500;i++)
        
{
            
if(this.ticket>0)
            
{
                System.out.println(
"卖票----->"+(this.ticket--));
            }

        }

    }

}

public   class  Demo2  {
    
public static void main(String args[])
    
{
           MyThread1 mt
=new MyThread1();
        Thread t1
=new Thread(mt);
        Thread t2
=new Thread(mt);
        Thread t3
=new Thread(mt);
        t1.start();
        t2.start();
        t3.start();
    }
 

}
 

程序运行结果:
这个程序是实现Runnable了,产生一类的实例对象,然后用Thread产生多个线程。
java 职场 线程 java基础

2

收藏

上一篇:简单应用小程序(类与类之间的关系... 下一篇:用多线程模拟生产零件系统程序
java实现多线程的两种方法的比较_第2张图片
冯魁

52篇文章,27W+人气,0粉丝

关注
java实现多线程的两种方法的比较_第3张图片

Ctrl+Enter 发布

发布

取消

2条评论

按时间倒序 按时间正序

推荐专栏更多

java实现多线程的两种方法的比较_第4张图片
微服务技术架构和大数据治理实战

大数据时代的微服务之路

共18章 | 纯洁微笑

¥51.00 694人订阅
订   阅
java实现多线程的两种方法的比较_第5张图片
基于Python的DevOps实战

自动化运维开发新概念

共20章 | 抚琴煮酒

¥51.00 507人订阅
订   阅

猜你喜欢

我的友情链接 jquery之empty()与remove()区别 Java多线程编程总结 Java关键字final、static使用总结 java万年历简单制作 Java内部类的使用小结 Java中的main()方法详解 Java相对路径读取文件 Java线程:创建与启动 Java线程:线程的同步与锁 深入研究java.lang.ThreadLocal类 java.util.logging.Logger使用详解 告别手写接口文档时代,比Swagger功能更强大的LKADocument接口文档管理框架诞生了! Sentinel:万字详解微服务的哨兵机制,我跪了 《吊打面试官》系列-Redis基础 大文件拷贝,试试NIO的内存映射 Redis实战(1)-Spring Boot2.0整合Redis自定义注入模板操作Bean组件 #IT明星不是梦#HashMap的底层原理 Springmvc执行流程 Spring事务的实现
java实现多线程的两种方法的比较_第6张图片
java实现多线程的两种方法的比较_第7张图片

扫一扫,领取大礼包

2

0

2
分享
java实现多线程的两种方法的比较_第8张图片
关注
冯魁
java实现多线程的两种方法的比较_第9张图片