发布于 2016-08-10 21:13:30 | 138 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Java并发编程示例,程序狗速度看过来!

Java程序设计语言

java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。


在Java中创建线程的方式有两种,第一种是直接继承Thead类,另一种是实现Runable接口。那么这两种方式孰优孰劣呢?这就是本文需要探讨的内容范畴了,看官们请仔细向下看

采用继承Thead类实现多线程:

优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用Thead.currentThread()方法。

劣势:因为这种线程类已经继承了Thead类,所以不能再继承其它类。

示例代码:



 package org.frzh.thread;

  

 public class FirstThread extends Thread{

     private int i;

     

     //重写run方法,run方法的方法体就是线程执行体

     public void run() {

         for (; i < 100; i++) {

             //当线程类继承Thread类时,可以直接调用getName方法获得当前线程名

             //如果想获得当前线程,直接使用this

             //Thread对象的getName方法返回当前线程的名字

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

         }

     }

     

     public static void main(String[] args) {

         for (int i = 0; i < 100; i++) {

             //调用Thead的currentThread方法获取当前线程

             System.out.println(Thread.currentThread().getName() + " " +i);

             if (i == 20) {

                 new FirstThread().start();

                 new FirstThread().start();

             }

         }

     }

 }

运行结果片段:

我们发现,在两个子线程中i的值并不连续,似乎与我们说的子线程直接共享数据不符。其实,在这里我们实例化了两个子线程,每个拥有自己的实例变量i。

采用实现Runable接口的多线程:

优势:线程类只是实现了Runable接口,因此还可以继承其他类;

         在这种情况下,可以使多个线程共享一个target对象,所以非常适合多个线程用来处理同一份资源的情况,从而可以将cpu、代码和数据分开,形成清晰的模型,较好的体现面向对象思想。

劣势:编程略有些复杂,如果要访问当前线程必须使用Thread.currentThread方法。

示例代码:



 package org.frzh.thread;

  

 public class SecondThread implements Runnable{

     private int i;

     

     @Override

     public void run() {

         // TODO Auto-generated method stub

         for (; i < 100; i++) {

             System.out.println(Thread.currentThread().getName() + " " + i);

         }

     }

     

     public static void main(String[] args) {

         for (int i = 0; i < 100; i++) {

             System.out.println(Thread.currentThread().getName() + " " + i);

             if (i == 20) {

                 SecondThread st = new SecondThread();

                 new Thread(st, "子线程1").start();

                 new Thread(st, "子线程2").start();

             }

         }

     }

  

 }


运行结果片段:

可以看到,此时的i值是连续变化的,因为线程1和2共享同一个target。



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务