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

目录
相关文章
|
3天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
21 0
|
1天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
1天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
1天前
|
JavaScript 前端开发 Oracle
java和JavaScript的区别
java和JavaScript的区别
6 3
|
2天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
6 0
|
2天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
2天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
15 0
|
2天前
|
监控 安全 Java
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
10 2
|
2天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
28 1
|
2天前
|
安全 Java
Java基础教程(15)-多线程基础
【4月更文挑战第15天】Java内置多线程支持,通过Thread类或Runnable接口实现。线程状态包括New、Runnable、Blocked、Waiting、Timed Waiting和Terminated。启动线程调用start(),中断线程用interrupt(),同步用synchronized关键字。线程安全包如java.util.concurrent提供并发集合和原子操作。线程池如ExecutorService简化任务管理,Callable接口允许返回值,Future配合获取异步结果。Java 8引入CompletableFuture支持回调。

热门文章

最新文章