多线程的创建与使用(一)

多线程

进程

程序的一次运行就是一次进程,进程里面有多个线程组成

线程

开启线程

对象.start();

通过thread来开启线程举例

package base.duoxiancheng.Demo01;

public class Test extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 200; i++) {
            System.out.println("这是run的"+i);

        }
    }

    public static void main(String[] args) {
        Test t1=new Test();
        t1.start();
        for (int i = 0; i < 2000; i++) {
            System.out.println("这是主线程的"+i);

        }
    }
}

因此运行结果 中 run中主线程中

因此说明两种线程同时进行~

实现Runnable接口实现

package base.duoxiancheng.Demo02;

import base.duoxiancheng.Demo01.Test;

public class TestTread2 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 200; i++) {
            System.out.println("这是run的"+i);

        }
    }

    public static void main(String[] args) {
        TestTread2 t1 = new TestTread2();
        Thread thread=new Thread(t1);
        thread.start();
        //或者         new Thread(t1).start(); 匿名对象进行调用


        for (int i = 0; i < 2000; i++) {
            System.out.println("这是主线程的"+i);

        }
}}


//运行结果
这是主线程的109
这是主线程的110
这是run的72
这是run的73
这是run的74
这是run的75
这是run的76
这是run的77
这是主线程的111
这是run的78

启动线程

传入目标对象+thread对象.start()

runnable接口能够避免单继承的局限性,方便一个接口与多个线程使用

多线程

下面一个例子解释多线程的(模拟买票系统)

package base.duoxiancheng.Demo03;
//发现问题,多个线程操作同个资源的时候,会有重复现象,不安全,线程紊乱

public class TestTread3 implements Runnable{
    private int ticeknum=10;
    @Override
    public void run() {
        while (true) {
            if (ticeknum <= 0)
                break;
            try {
                Thread.sleep(200);//加了线程延时
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println(Thread.currentThread().getName() + "拿到了第" + ticeknum-- + "票");//获取线程的名字

        }
    }

    public static void main(String[] args) {
        TestTread3 testTread3=new TestTread3();
        new Thread(testTread3,"小明").start();
        new Thread(testTread3,"小红").start();
        new Thread(testTread3,"黄牛党").start();
    }
}

运行结果为

小红拿到了第9票
黄牛党拿到了第10票
小明拿到了第10票
黄牛党拿到了第6票
小明拿到了第7票
小红拿到了第8票
小明拿到了第5票
小红拿到了第5票
黄牛党拿到了第5票
小红拿到了第4票
黄牛党拿到了第4票
小明拿到了第3票
黄牛党拿到了第2票
小红拿到了第1票
小明拿到了第1票

下面解决票数重复问题



龟兔赛跑案例

package base.duoxiancheng.Demo04;

public class race implements Runnable{

    @Override
    public void run() {
        boolean r=true;
        if (Thread.currentThread().getName().equals("兔子"));
        {
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        for (int i = 0; i <=100 ; i++) {
            if(!(r=gameover(i))){
                break;
            }
            System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");


        }
    }
    public boolean gameover(int step){
        if (step>100)
            return false;
        else
            return true;

    }

    public static void main(String[] args) {
        race race=new race();
        new Thread(race,"兔子").start();
        new Thread(race,"乌龟").start();
    }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值