多线程1.构建Thread子类

1.多线程

多线程程序是指一个程序中包含多个执行流,它是实现并发机制的有效手段。从逻辑的观点看,多线程意味着一个程序的多个语句块同时执行,但不等于多次启动一个程序。

引入多线程程序设计的原因:

①某些应用具有内在的多控制流结构,这些控制流具有合作性质,需要共享内存。采用多线程易于对问题建模。

②在需要多控制流的应用中,多线程比多进程在速度上具有绝对优势。统计表明,线程的建立速度约比进程的建立速度快100倍。

③采用多线程可提高处理机与设备之间的并行性。

④在多处理机的硬件环境中,多线程可并行执行,从而可提高资源利用率和进程推进速度。

  多线程机制是Java语言的重要特征之一,Java是基于操作系统级的多线程环境设计的,JVM依靠多线程来执行多任务,并且所有类库在设计时多考虑到多线程机制。

  Java的多线程是一个类,这个类可以对它的线程进行控制,可以确定哪个线程的优先提高,哪个线程应该执行等等。线程的执行由拥有这个线程的一个或多个类来控制。

  Java中实现线程的方法有两种,第一种是生成Thread类的子类,并定义该子类自己的run()方法,县城要完成的任务在run()方法中实现。这种方法比较简单,但是如果定义的类已经是其他类的子类,而Java不允许多重继承,我们可以采取第二种方法实现Runnable接口,通过实现Runnable接口中的Run()方法来完成线程的任务。

2.构建Thread子类对象

Java直接定义了一个从根类object中派生的Thread类。所以从java.lang.Thread类派生的直接子类或间接子类均为线程。构建Thread子类对象的步骤如下:

①构建的Thread子类,重写其中run ()方法。

②创建线程对象。

③线程对象调用start()方法启动该线程。

实例:

public class Main {
    public static void main(String[] args) {
        System.out.println("Starting Main");
        A t1=new A("thread1");
        t1.start();
        A t2=new A("thread2");
        t2.start();
        A t3=new A("thread3");
        t3.start();
    }
}
public class A extends Thread{
    String threadId;
    public A(String threadId){
        this.threadId=threadId;
    }
    public void run(){
        System.out.println("Thread start:"+this.threadId);
        for(int i=0;i<6;i++){
            System.out.println("i="+(i+1)+"\t");
            System.out.println("Thread stopped:"+this.threadId);
        }
    }
}

以下是运行结果:

Starting Main
Thread start:thread1
Thread start:thread3  i=1    
Thread start:thread2
Thread stopped:thread3  i=1    i=2    
Thread stopped:thread3  i=1    
Thread stopped:thread2 i=2    i=3    
Thread stopped:thread1
Thread stopped:thread3
Thread stopped:thread2  i=3    
Thread stopped:thread2  i=4    
Thread stopped:thread2  i=5    
Thread stopped:thread2  i=6    
Thread stopped:thread2  i=4    
Thread stopped:thread3  i=2    
Thread stopped:thread1  i=3    
Thread stopped:thread1  i=4    
Thread stopped:thread1  i=5    
Thread stopped:thread1  i=6    
Thread stopped:thread1  i=5    
Thread stopped:thread3  i=6    
Thread stopped:thread3
每次运行会产生不同的结果,因为它没有确定什么时候执行哪个线程。同时运行的不止3个线程,至少需要4个线程,其中3个线程在main()方法中创建,并相互独立地运行,还有一个线程执行main()方法。

下面是利用Thread来买车票的简单代码:

public class Main {
    public static void main(String[] args) {
        Ticket t=new Ticket();
        t.start();
        Ticket t1=new Ticket();
        t1.start();
    }
}
public class Ticket extends Thread{
    private static int ticket=10;
    public  Ticket(){}
    public void run(){
        while (ticket!=0) {
            ticket--;
            System.out.println(getName()+"    "+"剩余车票:"+ticket);
        }
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值