java学习[1]_多线程

多线程

简要介绍java中多线程相关知识

  • (一)多线程介绍:
    随着CPU进入双核、多核时代,多线程的优势越来越明显。多线程是Java中的并发机制,表示能够在同一时间内同时执行多个操作。
    这里举个多线程的例子,多线程实际开发例子:在很多网站中,当用户注册后,系统一方面会通知用户已经注册成功,一方面向用户在注册时填写的Email中发送邮件。

  • (二)如何定义线程:
    定义线程有两种方法,一种是继承Thread类,一种是实现Runnable接口。
    A、继承Thread类:定义一个线程可以通过继承Thread类来实现,这是一种相对简单的定义线程的方法。在Thread类中具有一个run方法,在定义的线程中需要重写这个方法。
    B、实现Runnable接口:通过实现Runnable接口来实现。 在Runnable接口中具有一个抽象的run方法, 在实现Runnable接口时, 需要实现该run方法。
    这两种方法中都需要定义一个run方法,不管该方法是通过重写父类方法,还是实现接口方法。 run方法是一个线程的入口,是线程必须具有的。使用通过实现Runnable接口定义的线程中,要想创建线程对象就不是很容易做到的。因为直接创建类对象,创建的并不是一个线程对象。要想创建线程对象,必须要借助Thread类:
    XianCheng x = new XianCheng(); Thread t = new Thread(x);

  • (三)线程是存在生命周期的:
    线程的生命周期分为五种不同的状态:分别是新建状态、准备状态、运行状态、等待/阻塞状态和死亡状态。
    1、新建:当一个线程对象被创建后;
    2、准备:处于新建状态中的线程被调用start方法后;
    3、运行:处于准备状态中的线程一旦被系统选中,使线程获取了CPU时间,就会进入运行状态;
    4、等待/阻塞:许多线程调度的方法,包括睡眠、阻塞、挂起和等待,这些方法将在后面的调度章节中讲解。使用这些方法都会将处于运行状态的线程调度到等待/阻塞状态;
    5、死亡:当线程中的run方法执行结束后,或者程序发生异常终止运行后,线程会进入死亡状态。

  • (五)常用函数:
    1、sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
    2、join():指等待t线程终止。使用方式。join是Thread类的一个方法,启动线程后直接调用,即join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。
    3、yield():暂停当前正在执行的线程对象,并执行其他线程。

代码1:继承Thread方法,使用了sleep函数:

package TestDuoxiancheng;
//使用sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
public class TestThread1 extends Thread{
    private String name;
    private int count = 5;
    public TestThread1(String name){
        this.name = name;
    }
    public void run() {
        for(int i=0;i<5;i++){
            System.out.println(name + "线程在运行,此时的  count= " + count--);
            try {
                sleep((int) Math.random() * 5);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestThread1 T1 = new TestThread1("A");
        TestThread1 T2 = new TestThread1("B");
        System.out.println("实现Thread类的方法:");
        T1.start();
        T2.start();
        }
}

XiaoV_余

代码2:实现Runnable接口:

package TestDuoxiancheng;
//使用sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
public class TestRunnable1 implements Runnable{
     private int count=4;
     public void run(){
        for(int i=0;i<5;i++){
              System.out.println(Thread.currentThread().getName() + "线程在运行  count= " + count--);
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestRunnable1 TR1 = new TestRunnable1();
        Thread T1 = new Thread(TR1,"C");
        Thread T2 = new Thread(TR1,"D");
        System.out.println("继承Runnable的方法:");
        T1.start();
        T2.start();
    }
}

猜你喜欢

转载自blog.csdn.net/yuxiao_v/article/details/54896641
今日推荐