【java复习】线程

线程的概念

(1)什么是线程?
(2)线程是轻量级的进程
(3)线程没有独立的地址空间
(4)线程是由进程创建的(寄生在进程中)
(5)一个进程可以有多个线程
(6)线程有多个状态:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。

线程的状态转换图

这里写图片描述

线程的使用

在java中一个类要当做线程来使用有两种方法:
(1) 继承Thread类并重写run方法
(2) 实现Runnable接口,重写run方法
为什么要设计第二种方法实现Runnable方法实现线程?
因为java是单继承的,在某些情况下一个类可能已经继承了某个父类,这是再用继承Thread方法来创建线程显示是不可能的,java设计者们于是就设计了第二种实现Runable接口来创建线程

通过继承Thread来创建线程,案例代码:

/*
 * 演示如何通过继承Thread来创建线程*/
package com.fox.test1;

public class Demo10_1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat cat1 = new Cat();
        //启动线程,会导致run函数的运行
        cat1.start();
    }

}

class Cat extends Thread{

    int times=0;
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true)
        {
            try {
                Thread.sleep(1000);//休眠1000ms
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            times++;
            System.out.println("Thread:helloworld!"+"    第"+times+"次打印");
            if(times ==10)
                break;
        }
    }


}

通过实现Runnable接口来创建线程,案例代码:

package com.fox.test2;
/*
 * 演示使用实现Runnable接口的方式来创建线程*/
public class Demo10_2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat cat1 = new Cat();
        Thread thread= new Thread(cat1);
        thread.start();//启动线程的方式与继承Thread不同,先创建一个此线程对象,传入cat1的实例 ,然后调用线程的start函数

    }

}

class Cat implements Runnable{
    int times =0;
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true)
        {
            try {
                Thread.sleep(1000);//休眠1000ms
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            times++;
            System.out.println("Thread:helloworld!"+"    第"+times+"次打印");
            if(times ==10)
                break;
        }
    }

}

多线程案例

多线程编写按钮,编写一个程序,该程序可以接收一个整数n,创建线程,一个线程计算从1+2+3..+n的结果,一个线程在控制台输出“我是一个线程,我正在输出第xx个helloworld“,xx要用具体的数字显示,这两个工作要同时进行。

/*
 * 演示两个线程同时运行*/
package com.fox.test3;

public class Demo10_3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Pig pig = new Pig(10);
        Bird brid = new Bird(10);
        Thread t1= new Thread(pig);
        Thread t2= new Thread(brid);
        t1.start();
        t2.start();
    }

}

//算数学题
class Bird implements Runnable{

    int n;
    int sum;
    int times =0;
    public Bird(int n) {
        this.n =n;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            sum+=(++times);
            System.out.println("当前的结果是"+sum);
            if(times == n)
            {
                System.out.println("最后的结果是"+sum);
                break;
            }
        }

    }
}

class Pig implements Runnable{
    int n;
    int times =0;


    public Pig(int n) {
        this.n = n;
    }


    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true)
        {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            times++;
            System.out.println("我是一个线程,正在输出第"+times+"个helloworld");
            if(times == n)
                break;
        }
    }
}

运行结果:

我是一个线程,正在输出第1个helloworld
我是一个线程,正在输出第2个helloworld
当前的结果是1
我是一个线程,正在输出第3个helloworld
我是一个线程,正在输出第4个helloworld
当前的结果是3
我是一个线程,正在输出第5个helloworld
当前的结果是6
我是一个线程,正在输出第6个helloworld
我是一个线程,正在输出第7个helloworld
我是一个线程,正在输出第8个helloworld
当前的结果是10
我是一个线程,正在输出第9个helloworld
当前的结果是15
我是一个线程,正在输出第10个helloworld
当前的结果是21
当前的结果是28
当前的结果是36
当前的结果是45
当前的结果是55
最后的结果是55

猜你喜欢

转载自blog.csdn.net/yuewen2008/article/details/81541647
今日推荐