欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java创建多线程的两种方式对比

程序员文章站 2024-02-29 18:14:22
采用继承thead类实现多线程: 优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用thead.currentthread()方法。 劣势:因为这种线...

采用继承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();
             }
         }
     }
 }

运行结果片段:

Java创建多线程的两种方式对比

我们发现,在两个子线程中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();
             }
         }
     }
 
 }

运行结果片段:

Java创建多线程的两种方式对比

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