Java 使用线程方式Thread和Runnable,以及Thread与Runnable的区别

简介:

一. java中实现线程的方式有Thread和Runnable

Thread:

1
2
3
4
5
6
public  class  Thread1  extends  Thread{
     @Override
     public  void  run() {
         System.out.println( "extend thread" );
     }
}

 Runnable:

1
2
3
4
5
6
7
8
public  class  ThreadRunable  implements  Runnable{
 
     public  void  run() {
         System.out.println( "runbale interfance" );
         
     }
     
}

 使用

1
2
3
4
public  static  void  main(String[] args) {
         new  Thread1().start();
         new  Thread( new  ThreadRunable()).start();
     }

  

 

二.Thread和Runnable区别

 1.在程序开发中使用多线程实现Runnable接口为主。 Runnable避免继承的局限,一个类可以继承多个接口

 2. 适合于资源的共享

   如下面的例子   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  class  TicketThread  extends  Thread{
     
     private  int  ticketnum =  10 ;
     
     @Override
     public  void  run() {
         for ( int  i= 0 ; i< 20 ;i++){
             if  ( this .ticketnum >  0 ) {
                 ticketnum--;
                 System.out.println( "总共10张,卖掉1张,剩余"  + ticketnum);
             }
         }
     }
}

  使用三个线程

1
2
3
4
5
6
7
8
public  static  void  main(String[] args) {
         TicketThread tt1 =  new  TicketThread();
         TicketThread tt2 =  new  TicketThread();
         TicketThread tt3 =  new  TicketThread();
         tt1.start();
         tt2.start();
         tt3.start();
     }

  实际上是卖掉了30张车票

而使用Runnable,如下面的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
public  class  TicketRunnableThread  implements  Runnable{
 
private  int  ticketnum =  10 ;
     
     public  void  run() {
         for ( int  i= 0 ; i< 20 ;i++){
             if  ( this .ticketnum >  0 ) {
                 ticketnum--;
                 System.out.println( "总共10张,卖掉1张,剩余"  + ticketnum);
             }
         }
     }
}

  使用三个线程调用

1
2
3
4
5
6
public  static  void  main(String[] args) {
         TicketRunnableThread trt1 =  new  TicketRunnableThread();
         new  Thread(trt1).start();
         new  Thread(trt1).start();
         new  Thread(trt1).start();
     }

  因为TicketRunnableThread是New了一次,使用的是同一个TicketRunnableThread,可以达到资源的共享。最终只卖出10张车票。

 

3.效率对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public  static  void  main(String[] args) {
     
          long  l1 = System.currentTimeMillis();
 
             for ( int  i =  0 ;i< 100000 ;i++){
                 Thread t =  new  Thread();
             }
 
             long  l2 = System.currentTimeMillis();
 
             for ( int  i =  0 ;i< 100000 ;i++){
                 Runnable r =  new  Runnable() {
                     public  void  run() {
                     }
                 };
             }
 
             long  l3 = System.currentTimeMillis();
 
             System.out.println(l2 -l1);
             System.out.println(l3 -l2);
     }

  在PC上的结果

1
2
119
5

  所以在使用Java线程池的时候,可以节约很多的创建时间

 



本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/p/6237218.html,如需转载请自行联系原作者

目录
相关文章
|
1天前
|
并行计算 Java 调度
深入理解Java中的多线程编程
【10月更文挑战第6天】 本文将探讨Java中多线程编程的基本概念、实现方式及其在实际项目中的应用。通过详细的示例和解释,读者能够掌握如何在Java中有效地使用多线程来提高程序的性能和响应能力。
4 1
|
2天前
|
Java 开发者
在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选
【10月更文挑战第6天】在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选。相比 `synchronized`,Lock 提供了更灵活强大的线程同步机制,包括可中断等待、超时等待、重入锁及读写锁等高级特性,极大提升了多线程应用的性能和可靠性。通过示例对比,可以看出 Lock 接口通过 `lock()` 和 `unlock()` 明确管理锁的获取和释放,避免死锁风险,并支持公平锁选择和条件变量,使其在高并发场景下更具优势。掌握 Lock 接口将助力开发者构建更高效、可靠的多线程应用。
8 2
|
3天前
|
监控 Java 调度
Java有哪几种方式创建线程?
本文详细介绍了Java中创建线程的四种主要方法:继承`Thread`类、实现`Runnable`接口、实现`Callable`接口配合`Future`,以及使用`Executor`框架。每种方法都有其独特特性和适用场景。通过示例代码和特点分析,帮助开发者根据具体需求选择合适的方式。
12 3
|
3天前
|
Java 数据处理 数据库
Java多线程的理解和应用场景
Java多线程的理解和应用场景
15 1
|
1天前
|
Java 程序员 开发者
Java中的多线程基础与实用技巧
【10月更文挑战第7天】本文旨在通过浅显易懂的语言和生动的比喻,向读者展示Java中多线程编程的世界。我们将一起探索创建线程的不同方法,理解线程生命周期的奥秘,并通过一些实用的技巧来避免常见的多线程陷阱。无论你是初学者还是有一定经验的开发者,这篇文章都将为你揭开多线程编程的神秘面纱,让你在并发编程的道路上走得更稳、更远。
|
1天前
|
Java 调度
深入理解Java中的多线程编程
【10月更文挑战第6天】 本文将通过通俗易懂的语言,详细讲解Java多线程编程的基本概念、使用方法以及注意事项。从简单的线程创建到高级的线程同步与通信,帮助您全面掌握Java多线程编程的核心知识,提升程序运行效率和性能。
6 0
|
3天前
|
安全 Java 调度
深入理解Java中的多线程编程
【10月更文挑战第5天】 本文将通过通俗易懂的方式,详细解析Java中多线程编程的核心概念和实际应用。我们将从基本概念入手,逐步探讨创建线程、线程同步、线程通信以及线程池的使用等内容。无论是初学者还是有经验的开发者,都能在本文中找到有价值的信息,启发对多线程编程的深层次思考。
|
5月前
|
存储 安全 Java
深入理解Java并发编程:线程安全与锁机制
【5月更文挑战第31天】在Java并发编程中,线程安全和锁机制是两个核心概念。本文将深入探讨这两个概念,包括它们的定义、实现方式以及在实际开发中的应用。通过对线程安全和锁机制的深入理解,可以帮助我们更好地解决并发编程中的问题,提高程序的性能和稳定性。
|
2月前
|
存储 安全 Java
解锁Java并发编程奥秘:深入剖析Synchronized关键字的同步机制与实现原理,让多线程安全如磐石般稳固!
【8月更文挑战第4天】Java并发编程中,Synchronized关键字是确保多线程环境下数据一致性与线程安全的基础机制。它可通过修饰实例方法、静态方法或代码块来控制对共享资源的独占访问。Synchronized基于Java对象头中的监视器锁实现,通过MonitorEnter/MonitorExit指令管理锁的获取与释放。示例展示了如何使用Synchronized修饰方法以实现线程间的同步,避免数据竞争。掌握其原理对编写高效安全的多线程程序极为关键。
57 1
|
3月前
|
安全 Java 开发者
Java并发编程中的线程安全问题及解决方案探讨
在Java编程中,特别是在并发编程领域,线程安全问题是开发过程中常见且关键的挑战。本文将深入探讨Java中的线程安全性,分析常见的线程安全问题,并介绍相应的解决方案,帮助开发者更好地理解和应对并发环境下的挑战。【7月更文挑战第3天】
75 0