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,如需转载请自行联系原作者

目录
相关文章
|
21天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
53 14
|
16天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
19 1
|
24天前
|
Java C# Python
线程等待(Thread Sleep)
线程等待是多线程编程中的一种同步机制,通过暂停当前线程的执行,让出CPU时间给其他线程。常用于需要程序暂停或等待其他线程完成操作的场景。不同语言中实现方式各异,如Java的`Thread.sleep(1000)`、C#的`Thread.Sleep(1000)`和Python的`time.sleep(1)`。使用时需注意避免死锁,并考虑其对程序响应性的影响。
|
26天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
44 8
|
1月前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
1月前
|
Java
为什么一般采用实现Runnable接口创建线程?
因为使用实现Runnable接口的同时我们也能够继承其他类,并且可以拥有多个实现类,那么我们在拥有了Runable方法的同时也可以使用父类的方法;而在Java中,一个类只能继承一个父类,那么在继承了Thread类后我们就不能再继承其他类了。
26 0
|
5月前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
60 0
|
2月前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
44 1
|
Java
Java基础系列-第一章 创建Thread的6种方式和线程常用方法
读完本章节,您将掌握如何创建线程和线程的常用方法。
164 1
Java基础系列-第一章 创建Thread的6种方式和线程常用方法
|
缓存 安全 Java
JAVA Thread Dump分析线程竞争
JAVA Thread Dump分析线程竞争
90 0
下一篇
DataWorks