栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础笔记08

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础笔记08

多线程

  • 多线程可以让程序具备多个并发的执行操作;
  • 线程是存在生命周期的。

                新建start()    准备  运行  堵塞  死亡

  • Java中对于线程后,可以保证的只是让每个线程都启动,并且会执行结果,但是无法决定多个线程中哪个先执行,哪个后执行。

————————————————————

创建线程对象

  • 继承Thread类:

        继承Thread类的子类具备了多线程的能力,重写Thread类的run方法,当线程被启动的时候,run方法中的程序就成为了一条独立的执行线程。

例:

public class NumberThread extends Thread {
 
    public CalThread(String name){
        setName(name); //给当前线程取名
    }
    
    @Override
    public void run() {
        for(int i=0; i<100; i++){
            String name = getName(); //获取当前线程的名称
            System.out.println(name + "==" + i);
        }
    }
}
 
@Test
public void test1(){
    NumberThread cal = new NumberThread("老司机线程");
    cal.start(); //启动线程
}
  • 实现Runnable接口

        实现Runnable接口,需要实现Runnable接口中提供的run方法,当线程被启动的时候,run方法中的程序就成为了一条独立的执行线程。

例:

public class NumberThread implements Runnable {
    private String name;
    public NumberThread(String name){
        this.name = name;
    }   
 
    
    @Override
    public void run() {
        for(int i=0; i<100; i++){
             System.out.println(name + "==" + i);
        }
    }
}
 
@Test
public void test2(){
    NumberThread number = new NumberThread("老司机线程");
    Thread t = new Thread(number);
    t.start(); //启动线程
}

————————————————————

控制(调度)线程

  • 睡眠的方法

        当线程处于运行状态时,调用sleep方法将使线程从运行状态进入阻塞状态,从而使程序中断运行。使正在运行的线程让出CPU最简单的方法之一。

例:

public class NumberThread implements Runnable {
    private String name;
 
    public NumberThread(String name){
        this.name = name;
    }
    
    @Override
    public void run() {
        for(int i=0; i<5; i++){
            System.out.println(name + "==" + i);
            try {
                 Thread.sleep(1*1000); //让线程睡眠1秒钟
            } catch (InterruptedException e) {
                 e.printStackTrace();
            }
        }
    }
}
@Test
public void test2(){
    NumberThread number = new NumberThread("老司机线程");
    Thread t = new Thread(number);
    t.start(); //启动线程
}
  • 让步的方法

        当线程处于运行状态时,调用sleep方法将使线程从运行状态进入阻塞状态,从而使程序中断运行。将CPU让给哪一个线程是不确定的。

例:

public class YieldThread extends Thread { 
    public YieldThread(String name) { 
        super(name); 
    } 
 
    @Override 
    public void run() { 
        for (int i = 1; i <= 50; i++) { 
            System.out.println("" + this.getName() + "-----" + i); 
            // 当i为30时,该线程就会把CPU时间让掉,让其他或者自己的线程执行(也就是谁先抢到谁执行) 
            if (i == 30) { 
                yield(); 
            } 
        } 
    }  
} 
 
public static void main(String[] args) {
    YieldThread yt1 = new YieldThread("张三");
    YieldThread yt2 = new YieldThread("李四");
    yt1.start();
    yt2.start();
}

————————————————————

案例:

        需求分析:费玉清去健身房。

public class FeiYuqing extends Thread {
    @Override
    public void run() {
        int race = 100;
        while(race > 0){
            try {
                int x = (int) (Math.random()*20);
                if(race - x >= 0){
                    race = race - x;
                    sleep(1*1000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("¥费玉清还有"+race+"米就逃跑成功啦");
        }
        System.out.println("**********费玉清逃跑成功");
    }
}
public class Chimpanzee extends Thread {
 
    @Override
    public void run() {
        int race = 100;
        while(race > 0){
            try {
                int x = (int) (Math.random()*20);
                if(race - x >= 0){
                    race = race - x;
                    sleep(1*1000);
               }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("!大猩猩还有"+race+"米就抓到费玉清啦");
        }
        System.out.println("**********大猩猩抓到了费玉清,祝你们幸福");
    }
}
public class Gym {
 
    public static void main(String[] args) {
        FeiYuqing fei = new FeiYuqing();
        fei.start(); //费玉清跑
        Chimpanzee chi = new Chimpanzee();
        chi.start(); //大猩猩追
    }
}

——————————————————————————————————————

笔记内容来源:大坏蛋^_^的博客_CSDN博客-Java基础,Linux,SpringBoot+领域博主

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/967226.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号