java线程控制

java线程控制的语法很多 这里我们主要说以下三个方法
在这里插入图片描述

我们先新建一个包

包下建立两个类
customException 线程类
参考代码如下

public class customException extends Thread {
    public String name;

    public customException(){

    }
    public void run(){
        for(int i = 0;i < 100;i++){
            System.out.println(getName()+"第"+(i + 1)+"次输出");
        }
    }
}

text 测试类
参考代码如下

public class text {
    public static void main(String args[]) {
        customException com1 = new customException();
        customException com2 = new customException();
        customException com3 = new customException();
        com1.setName("刘备");
        com2.setName("孙权");
        com3.setName("曹操");
        com1.start();
        com2.start();
        com3.start();
    }
}

然后 我们运行代码
在这里插入图片描述
我们可以看到 曹操既然没有干过刘备和孙权
把记录往上翻
在这里插入图片描述
我们看到 刚开始 我们的孙权也是非常的给力 但再执行一次 你会发现 他们谁快谁慢 完全是随机的

但按照历史 孙权和刘备应该要慢一些

我们改写 customException 类中的 run方法如下

public class customException extends Thread {
    public String name;

    public customException(){

    }
    public void run(){
        for(int i = 0;i < 100;i++){
            if(getName() == "孙权"||getName() == "刘备") {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(getName()+"第"+(i + 1)+"次输出");
        }
    }
}

这里我们取getName方法 就是获取当前的线程名称 判断 如果是 孙权或刘备 则 执行Thread中的sleep 里面是休眠的时间数
这样 每次孙权和刘备的线程执行时 都会先休眠一秒

我们运行代码如下
在这里插入图片描述
这里我们可以看到 曹操都跑完了 孙权和刘备总共也没执行几次 甚至才刚开始

因为他们每次执行都会先休眠一秒 而在计算机中 一秒可以做非常非常多的事

这就是sleep线程休眠的语法

我们去customException类中
把刚写的休眠代码去掉

然后我们改一下测试类的线程名称
在这里插入图片描述
康熙 四阿哥 八阿哥

这是一场皇位争夺战 但他们如果一起执行 谁快谁慢都不好说

但康熙是他们的父亲 啊 要等康熙挂了 他们才能开始抢啊

我们修改测试类main方法如下

public static void main(String args[]) {
   customException com1 = new customException();
   customException com2 = new customException();
   customException com3 = new customException();
   com1.setName("康熙");
   com2.setName("四阿哥");
   com3.setName("八阿哥");
   com1.start();
   try {
       com1.join();
   } catch (InterruptedException e) {
       e.printStackTrace();
   }
   com2.start();
   com3.start();
}

join方法就会强行控制 com1线程走完之后 其他线程才能继续执行
在这里插入图片描述
这就是第二个语法 强行 指定某个线程执行完毕 其他线程才能接着往下走

然后我们更改 customException 线程类的代码如下

public class customException extends Thread {
    public String name;
    public int age;

    public customException(int age){
        this.age = age;
    }
    public void run(){
        for(int i = 0;i < age;i++){
            System.out.println(getName()+"第"+(i + 1)+"次输出");
        }
    }
}

text测试类 代码如下

public class text {
    public static void main(String args[]) {
        customException com1 = new customException(10);
        customException com2 = new customException(100);
        customException com3 = new customException(100);
        com1.setName("总统");
        com2.setName("保镖");
        com3.setName("助理");
        com1.start();
        com2.start();
        com3.start();
    }
}

这是可以看到 我们将线程的次数 改成了 用age变量控制 而这个变量是customException构造函数中控制的
而我们总统传了 10 保镖和助理传了一百

在这里插入图片描述
执行之后 理所当然 总统执行了10次 但其他两个执行了 100次
但总统退休了 他们也就改退休了啊

我们这里改写text类中的main方法

public static void main(String args[]) {
    customException com1 = new customException(10);
    customException com2 = new customException(100);
    customException com3 = new customException(100);
    com1.setName("总统");
    com2.setName("保镖");
    com3.setName("助理");
    com1.start();
    com2.setDaemon(true);
    com3.setDaemon(true);
    com2.start();
    com3.start();
}

这是 我们将 com2和com3 都设置成立守卫线程 主线程结束之后 他们也会结束 我们运行代码
在这里插入图片描述
我们可以看到 保镖和助理执行了十几次也停了 因为主线程已经结束了
有些人就会说 主线程结束 他们不应该立马结束吗?
主线程结束 守卫线程还有一点反应时间才结束
这样总统退休 保镖和助理也就光荣下岗啦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值