CPU抢占式工具——多线程的实现

在Java中,多线程的实现有两种方式:
扩展java.lang.Thread类
实现java.lang.Runnable接口

1. 扩展java.lang.Thread类

package com.imooc.thread;

public class FirstThread extends Thread{
    private int i;
    public void run(){
        // TODO Auto-generated method stub
        for(;i<100;i++)
        {
          System.out.println(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)
          {
              //创建并启动第一个线程
              new FirstThread().start();
              //创建并启动第二个线程
              new FirstThread().start();
          }
      }
  }
}
//运行结果显示,当1<=20时,主线程main执行;之后main线程、FirstThread()三个线程抢占式同时执行!从程序运行的结果可以发现,多线程程序是乱序执行。

//调用Thread.currentThread().getName()方法,可以获取当前线程的名字。在mian方法中调用该方法,获取的是主线程的名字。

注意:start()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行是由操作系统决定的。

2. 实现java.lang.Runnable接口

package com.imooc.thread;

public class SecondThread implements Runnable
{
    private int i;
    public void run() {
        // TODO Auto-generated method stub
        for(;i<100;i++)
        {
            //当前线程类实现Runnable接口时,如果想获取当前线程,只能用Thread.curentThread()方法
            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(target, name)方法创建新线程
                new Thread(st,"新线程1").start();
                new Thread(st,"新线程2").start();
            }
        }
    }

说明:
run()方法是多线程程序的一个约定。所有的多线程代码都在run方法里面。Thread类实际上也是实现了Runnable接口的类。
在启动的多线程的时候,需要先通过Thread类的构造方法Thread(Runnable target) 构造出对象,然后调用Thread对象的start()方法来运行多线程代码。
实际上所有的多线程代码都是通过运行Thread的start()方法来运行的。因此,不管是扩展Thread类还是实现Runnable接口来实现多线程,最终还是通过Thread的对象的API来控制线程的,熟悉Thread类的API是进行多线程编程的基础。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值