首页 > 其他分享 >练习——简单的线程练习

练习——简单的线程练习

时间:2023-04-26 20:59:38浏览次数:33  
标签:Thread void 练习 线程 简单 new public loop

package com.thread_;

import java.util.Scanner;

/*
在main方法中启动两个线程
第1个线程循环随机打印100以内的整数
直到第2个线程从键盘读取了“Q”命令。

 */
public class ThreadExercise {
    public static void main(String[] args) {
        A a = new A();
        B b = new B(a);
        a.start();
        b.start();
    }

}

class A extends Thread {
    private boolean loop = true;
    @Override
    public void run() {
        while (loop){
            System.out.println((int)(Math.random()*100 + 1));
            //休眠
            try {
                sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void setLoop(boolean loop) {
        this.loop = loop;
    }
}

class B extends Thread {
    private A a;
    private Scanner scanner= new Scanner(System.in);
    public B(A a){
        this.a = a;
    }

    @Override
    public void run() {
        while (true){
        //接收键盘输入
        System.out.println("输入Q并回车停止打印");
        char str = scanner.next().toUpperCase().charAt(0);
        if (str == 'Q'){
                a.setLoop(false);
                break;
            }
        }
    }
}


package com.thread_;

/*
有2个用户分别从同一个卡上取钱(总额:10000)
每次都取1000,当余额不足时,就不能取款了
不能出现超取现象
 */
public class ThreadExercise2 {
    public static void main(String[] args) {
        User user = new User();
        Thread thread1 = new Thread(user);
        thread1.setName("user1");
        Thread thread2 = new Thread(user);
        thread2.setName("user2");
        thread1.start();
        thread2.start();
    }

}
//涉及多个线程共享资源,故实现Runnable接口
class User implements Runnable {
    private static int money = 10000;
    @Override
    public void run() {
        while (true){
            synchronized (this) {
                money -= 1000;
                System.out.println(Thread.currentThread().getName() + "取出1000元," + "余额" + money);
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (money <= 0){
                System.out.println("余额不足!!!");
                break;
            }
        }
    }
}

标签:Thread,void,练习,线程,简单,new,public,loop
From: https://www.cnblogs.com/Q1u-ovo/p/17357240.html

相关文章

  • mysql基础练习(二)
    --创建表droptableifexistsemp;createtableemp(empnoint,enamevarchar(50),jobvarchar(50),mgrint,hiredatedate,saldecimal(7,2),commdecimal(7,2),deptnoint)engine=innodbdefaultcharset=utf8;droptableifexistsdept;createtabledept(d......
  • java线程之Semaphore
    Semaphore是信号量,用于线程间同步。例子,公交车上大概有24个座位,但是车上总共有40个人,那么,只要有一个人下车,另一个人就能得到一个座位,假设到终点站之前,每个人都能坐下。代码如下:packagecom.concurrent;importjava.util.Random;importjava.util.concurrent.CountDownLatch;imp......
  • java线程之FutureTask
    FutureTask是线程的异步计算。如果有多个线程,每个线程都要花很多时间计算,而且所花时间不同,最后要统计,就要用到此类。此类有个done方法,等call完后,执行此方法。代码:packagecom.concurrent;importjava.util.ArrayList;importjava.util.List;importjava.util.Random;importja......
  • java线程之wait、notifyAll
    wait、notifyAll是线程之间用来通信的,设计模式里的观察者模式。例子,上课前,同学在玩,一个同学观察老师是不是来了,如果来了,叫其他同学坐好。packagecom.concurrent;importjava.util.HashSet;importjava.util.Set;importjava.util.concurrent.CountDownLatch;importjava.util......
  • c++打卡练习(17)
    爱因斯坦数学题:一条长台阶,若每步2阶台阶,则最后剩1阶,若每步3阶台阶,则最后剩2阶,若每步5阶台阶,则最后剩4阶,若每步6阶台阶,则最后剩5阶,若每步7阶台阶,则最后剩6阶,问在1到N的范围内有多少个这样的阶梯数,他们分别是多少?流程图:伪代码:源代码:#include<iostream>usingnamespacestd;int......
  • java 多线程 synchronized
    程序1:packagetestsynchronized;publicclassThread1implementsRunnable{ @Override publicvoidrun(){ synchronized(this){ for(inti=0;i<10;i++){ System.out.println(Thread.currentThread().getName() +"synchronizedloo......
  • AcWing 242. 一个简单的整数问题 / 树状数组区间修改区间查询模板题
    AcWing242.一个简单的整数问题//实例化是抽象的天敌,是抽象的克星//通过公式sn=(i从1~n求积)di*(1+n)-(i从1~n求积)i*di//来计算前缀和,又(i从1~n求积)i*di不能由(i从1~n求积)di*(1+n)推出//所以除了维护d数组,还需维护......
  • django token 认证 简单记录
    classUser(AbstractUser):username=models.CharField(max_length=20,unique=True,primary_key=True,verbose_name="用户名")email=models.EmailField(max_length=256,null=False,verbose_name="邮箱",blank=True)pass......
  • .net core使用miniExcel完成简单excel的导入和导出功能
    今天学习了miniExcel,并通过它实现了一个简单的上传和导出的功能导入比较简单:publicIActionResultImportExcel(){varfile=HttpContext.Request.Form.Files[0]; //获取上传的文件信息varstream=newMemoryStream();//新建内存流......
  • 简单工厂模式
    一、第一种方法//实现了客户端调用和implOne,implTwo的解耦合//factory类实现了变化隔离1#include<string>2#include"DynOBJ.h"3usingnamespacestd;45classApi{6public:7virtualvoidtest(strings)=0;8protected:9Api(){}10};11......