Java线程学习笔记(一)

线程和进程:进程指的是一个单独的程序,占有电脑中的一块内存。是一个静态概念,而线程是进程的一段执行流程。一个程序中可以有很多个的执行流程,线程是一个动态的概念。

Java中的线程
1、线程的生命周期。
线程的声明周期分为:创建、就绪、运行、阻塞、死亡五个状态。
创建:Java中创建线程最常用的有两个方法,分别是实现Runnable接口和继承Thread类。
Runnable接口实现多线程。

package thread;

public class ThreadDemo implements Runnable{

    private String name;
    //通过构造函数将name传递过来
    public ThreadDemo(String name){
        this.name = name;
    }
    @Override
    public void run() {
        // 实现run方法
        for(int i = 0; i<49; i++){
            System.out.println(name+"吃苹果");
        }
    }

}

接着创建一个测试类

package thread;

public class Test {
    public static void main(String[] args) {
        //创建两个ThreadDemo的对象
        ThreadDemo demo1 = new ThreadDemo("熊大");
        ThreadDemo demo2 = new ThreadDemo("熊二");
        //创建两个线程
        Thread th1 = new Thread(demo1);
        Thread th2 = new Thread(demo2);

        //启动线程
        th1.start();
        th2.start();

    }
}

执行结果:

熊大吃苹果
熊大吃苹果
熊二吃苹果
熊大吃苹果
熊二吃苹果
熊二吃苹果
熊大吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊二吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果
熊大吃苹果

需要,我们执行run方法的时候不是直接调用它,而是调用start方法。也就是说启动这个线程。启动了start方法的时候会去调用实例化线程对象的run方法。

继承Thread类实现多线程

package thread;

public class ThreadDemo_01 extends Thread{

    private String name;
    //构造函数传递参数
    public ThreadDemo_01(String name){
        this.name = name;
    }

    //重写run方法
    public void run(){
        for(int i = 0;i<19; i++){
            System.out.println(name+"吃苹果");
        }
    }

}

创建一个测试类

package thread;

public class Test2 {
    public static void main(String[] args) {
        //创建两个线程实例对象
        Thread th1 = new ThreadDemo_01("牛大");
        Thread th2 = new ThreadDemo_01("牛二");
        //启动线程
        th1.start();
        th2.start();
    }
}

执行结果

牛二吃苹果
牛二吃苹果
牛大吃苹果
牛二吃苹果
牛大吃苹果
牛二吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛二吃苹果
牛大吃苹果
牛二吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛大吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果
牛二吃苹果

线程的阻塞
线程sleep(睡眠)
Java线程sleep睡眠是指让线程执行的过程中暂停一段指定的时间,这段指定的时间过了之后继续执行。虾米昂下面通过一段代码说明:

package thread;

public class Thread_SleepDemo extends Thread{
    private String name;
    public Thread_SleepDemo(String name){
        this.name = name;
    }

    public void run(){
        for(int i=0; i<9;i++){
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(name+"吃苹果");

        }
    }

    public static void main(String[] args) {
        Thread th1 = new Thread_SleepDemo("驴大");
        th1.start();
        Thread th2 = new Thread_SleepDemo("驴二");
        th2.start();
    }
}

执行结果:

驴二吃苹果
驴二吃苹果
驴大吃苹果
驴大吃苹果
驴大吃苹果
驴大吃苹果
驴大吃苹果
驴大吃苹果
驴大吃苹果
驴大吃苹果
驴大吃苹果
驴二吃苹果
驴二吃苹果
驴二吃苹果
驴二吃苹果
驴二吃苹果
驴二吃苹果
驴二吃苹果

在上面的代码中,每次的执行过程,Java线程都会睡眠3毫秒,在这三毫秒内,其他的线程就有机会执行,线程的睡眠会帮助所有的线程都能够获取执行的机会。sleep方法是一个静态方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值