Java基础--多线程--练习(过隧道)

编写多线程应用程序,模拟多个人通过一个山洞:

1、 这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒

2、随机生成10个人,同时准备过此山洞,显示一下每次通过山洞人的姓名

MuThreadTest.java

package com.Train;

public class MuThreadTest{

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建一个山洞
        Tunnel tul = new Tunnel();

        //十个人过山洞
        Thread p1 = new Thread(tul,"p1");
        Thread p2 = new Thread(tul,"p2");
        Thread p3 = new Thread(tul,"p3");
        Thread p4 = new Thread(tul,"p4");
        Thread p5 = new Thread(tul,"p5");
        Thread p6 = new Thread(tul,"p6");
        Thread p7 = new Thread(tul,"p7");
        Thread p8 = new Thread(tul,"p8");
        Thread p9 = new Thread(tul,"p9");
        Thread p10 = new Thread(tul,"p10");
        p1.start();
        p2.start();
        p3.start();
        p4.start();
        p5.start();
        p6.start();
        p7.start();
        p8.start();
        p9.start();
        p10.start();
    }
}

class Tunnel implements Runnable{
    private int crossedNum = 0;
    //override
    public void run(){
        Cross();
    } 
    //同步函数--同步锁为this,即main()中创建的tul。 
    public  synchronized void Cross(){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        crossedNum++;
        System.out.println(Thread.currentThread().getName()+" have Crossed the tunnel !"+" This is "+crossedNum+"th");

    }
}

<console>:

时间: 2024-07-29 02:35:12

Java基础--多线程--练习(过隧道)的相关文章

黑马程序员——java基础——多线程

 黑马程序员--java基础--多线程 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程. 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区.自己的变量.

Java基础-多线程-③多线程的同步之synchronized

使用线程同步解决多线程安全问题 上一篇 Java基础-多线程-②多线程的安全问题 中我们说到多线程可能引发的安全问题,原因在于多个线程共享了数据,且一个线程在操作(多为写操作)数据的过程中,另一个线程也对数据进行了操作,从而导致数据出错.由此我们想到一个解决的思路:将操作共享数据的代码行作为一个整体,同一时间只允许一个线程执行,执行过程中其他线程不能参与执行.线程同步就是用来实现这样的机制. synchronized代码块 Java中提供了synchronized关键字,将可能引发安全问题的代码

Java基础-多线程-②多线程的安全问题

什么是线程的安全问题? 上一篇 Java基础-多线程-①线程的创建和启动 我们说使用实现Runnable接口的方式来创建线程,可以实现多个线程共享资源: 1 class Dog implements Runnable { 2 // 定义线程共享数据 3 private int t = 100; 4 5 @Override 6 public void run() { 7 // TODO:死循环,暂不处理 8 while (true) { 9 if (t > 0) { 10 11 System.ou

Java基础——多线程(1)

进程:应用程序在内存中分配的空间(正在运行的程序). 线程:是进程中负责程序执行的执行单元,也称为执行路径. 一个进程中至少有一个线程,在负责该进程的运行. 如果一个进程中出现了多个线程,就称为该程序为多线程程序. 多线程技术:解决多部分代码同时执行的需求,合理使用CPU资源. 多线程的运行是根据CPU的切换完成的,怎么切换是CPU说的算.所多线程运行有一个随机性(CPU快速切换造成的). jvm中的多线程: 至少有两个线程,一个是负责自定义代码运行的,一个是负责垃圾回收的. 发现结果并不相同,

Java基础--多线程的方方面面

1,什么是线程?线程和进程的区别是什么? 2,什么是多线程?为什么设计多线程? 3,Java种多线程的实现方式是什么?有什么区别? 4,线程的状态控制有哪些方法? 5,线程安全.死锁和生产者--消费者 6,线程的优化有哪些方法? 1,什么是线程?线程和进程的区别是什么? 线程是程序执行的最小单元. 区别: 进程是操作系统进行资源处理和分配的最小单位,而一个进程可以包含多个线程,并共享进程的资源. 2,什么是多线程?为什么设计多线程? 介绍之前,我们需要理解并行和并发的定义: 并行:同一个时刻有多

黑马程序员--Java基础--多线程|线程同步

--Java培训.Android培训.iOS培训..Net培训 期待与您共同交流!-- 多线程基础.线程同步 1. 多线程基础 1.1. 进程和线程 1.1.1. 什么是进程 所谓进程(process)就是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元.进程中所包含的一个或多个执行单元称为线程(thread).进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问.线程只能归属于一个进程并且它只能访问该进程所拥有的资源.当操作系统创建一个进程后,该进程会自动

Java基础-多线程篇

1. 多线程基础 想要设计一个程序,边打游戏边听歌,怎么设计? 要解决上述问题,得使用多进程或者多线程来解决. 1.1 并发和并行 并发:指两个或多个事件在同一个时间段内发生 (交替执行). 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每 一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的. 并行:指两个或多个事件在同一时刻发生(同时发生). 而在多个 CPU 系

java 基础--多线程基础练习

1.随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实现. import java.util.Random; //多线程类 //1.是Thread的子类 //2.重写run方法 public class Test01 extends Thread{ @Override public void run() { for(int i=0;i<10;i++

黑马程序员-java基础-多线程2

5.多线程的安全问题:多线程同步 当使用多个线程同时访问一个数据时,经常会出现线程安全问题.如下面程序: 1 package Thread; 2 3 /* 4 * 多个线程同时访问一个数据时,出现的安全问题. 5 * 模拟一个卖火车票系统:一共有100张票,多个窗口同时卖票 6 */ 7 class Ticks implements Runnable 8 { 9 private int ticks = 100 ; 10 public void run() 11 { 12 while (ticks