zoukankan      html  css  js  c++  java
  • java多线程有几种实现方法,都是什么?

     转自:http://www.cnblogs.com/liujichang/p/3150387.html

    多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

    同步的实现方法有两种,分别是synchronized,wait与notify

    先看一下java线程运行时各个阶段的运行状态

    java实现多线程有两种方法

    1、继承Thread类

    2、实现Runnable接口

    这两种方法的共同点:

    不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法

    两种方法的不同点:

    1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承

    2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性

    基于以上两点所以建议用第二种方法

     1 package cn.itcast.demo1;
     2 
     3 public class MyThread extends Thread {
     4     private String name;
     5     public MyThread(String name){
     6         this.name = name;
     7     }
     8     //如果要使用多线程,则必须有一个方法的主体
     9     public void run(){
    10         //打印输出
    11         for(int i = 0;i < 10; i++){
    12             System.out.println(this.name + "----->运行");
    13         }
    14     }
    15 
    16 }
     1 package cn.itcast.demo1;
     2 
     3 public class Demo5 {
     4     public static void main(String[] args) {
     5         Runnable r1 = new MyThread("线程一");
     6         Runnable r2 = new MyThread("线程二");
     7         Runnable r3 = new MyThread("线程三");
     8         
     9         Thread t1 = new Thread(r1);
    10         Thread t2 = new Thread(r2);
    11         Thread t3 = new Thread(r3);
    12         
    13         t1.start();
    14         t2.start();
    15         t3.start();
    16         
    17     }
    18     
    19 
    20 }
     1 package cn.itcast.demo1;
     2 
     3 public class Demo6 {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         MyThread mt1 = new MyThread("线程A");
     8         MyThread mt2 = new MyThread("线程B");
     9         MyThread mt3 = new MyThread("线程C");
    10         
    11         mt1.start();
    12         mt2.start();
    13         mt3.start();
    14 
    15     }
    16 
    17 }

    这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程

    第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程

    程序2:

     1 package cn.itcast.demo1;
     2 
     3 public class MyThread1 implements Runnable {
     4     private int ticket = 10;
     5 
     6     @Override
     7     public void run() {
     8         // TODO Auto-generated method stub
     9         for(int i = 0; i < 500;i++){
    10             if(this.ticket > 0){
    11                 System.out.println("卖票------》" + (this.ticket--));
    12             }
    13         }
    14 
    15     }
    16 
    17 }
     1 package cn.itcast.demo1;
     2 
     3 public class Demo7 {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         MyThread1 mt = new MyThread1();
     8         Thread t1 = new Thread(mt);
     9         Thread t2 = new Thread(mt);
    10         Thread t3 = new Thread(mt);
    11         
    12         t1.start();
    13         t2.start();
    14         t3.start();
    15         
    16 
    17     }
    18 
    19 }

    这个程序是实现Runnable了,产生一类的实例对象,然后用Thread产生多个线程。

  • 相关阅读:
    课后作业-阅读任务-阅读笔记-4
    团队编程项目作业5-小组评分
    课后作业-阅读任务-阅读提问-3
    20171110-构建之法:现代软件工程-阅读笔记
    团队-中国象棋-开发文档
    结对-贪吃蛇-结对项目总结
    20171129-构建之法:现代软件工程-阅读笔记
    课后作业-阅读任务-阅读提问-4
    软件工程课程总结
    团队-石头剪刀布-项目总结
  • 原文地址:https://www.cnblogs.com/LoganChen/p/6392104.html
Copyright © 2011-2022 走看看