博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验十七 线程同步控制
阅读量:4511 次
发布时间:2019-06-08

本文共 2983 字,大约阅读时间需要 9 分钟。

                                                                                                                                             实验十七  线程同步控制

                                                                                                                                                                                  实验时间 2018-12-10

1、实验目的与要求

(1) 掌握线程同步的概念及实现技术; 

(2) 线程综合编程练习

2、实验内容和步骤

实验1:测试程序并进行代码注释。

测试程序1:

l 在Elipse环境下调试教材651页程序14-7,结合程序运行结果理解程序;

l 掌握利用锁对象和条件对象实现的多线程同步技术。

实验结果:

 

测试程序2:

l 在Elipse环境下调试教材655页程序14-8,结合程序运行结果理解程序;

l 掌握synchronized在多线程同步中的应用。

实验结果:

 

测试程序3:

l 在Elipse环境下运行以下程序,结合程序运行结果分析程序存在问题;

l 尝试解决程序中存在问题。

class Cbank

{

     private static int s=2000;

     public   static void sub(int m)

     {

           int temp=s;

           temp=temp-m;

          try {

      Thread.sleep((int)(1000*Math.random()));

    }

           catch (InterruptedException e)  {              }

           s=temp;

           System.out.println("s="+s);

   }

}

 

 

class Customer extends Thread

{

  public void run()

  {

   for( int i=1; i<=4; i++)

     Cbank.sub(100);

    }

 }

public class Thread3

{

 public static void main(String args[])

  {

   Customer customer1 = new Customer();

   Customer customer2 = new Customer();

   customer1.start();

   customer2.start();

  }

}

修改后的代码:

package a;class Cbank{     private static int s=2000;     public  synchronized static void sub(int m)     {           int temp=s;           temp=temp-m;          try {                 Thread.sleep((int)(1000*Math.random()));               }           catch (InterruptedException e)  {              }              s=temp;              System.out.println("s="+s);          }    }class Customer extends Thread{  public void run()  {   for( int i=1; i<=4; i++)     Cbank.sub(100);    } }public class Thread3{ public static void main(String args[])  {   Customer customer1 = new Customer();   Customer customer2 = new Customer();   customer1.start();   customer2.start();  }}

实验运行结果:

 

 

实验2 编程练习

利用多线程及同步方法,编写一个程序模拟火车票售票系统,共3个窗口,卖10张票,程序输出结果类似(程序输出不唯一,可以是其他类似结果)。

Thread-0窗口售:第1张票

Thread-0窗口售:第2张票

Thread-1窗口售:第3张票

Thread-2窗口售:第4张票

Thread-2窗口售:第5张票

Thread-1窗口售:第6张票

Thread-0窗口售:第7张票

Thread-2窗口售:第8张票

Thread-1窗口售:第9张票

Thread-0窗口售:第10张票

实验源代码:

package ThreadTest;public class Demo1 extends Thread {    static int t = 1;    public void run() {        synchronized (this) {            while (t <= 10) {                if (t <= 10) {                    System.out.println(Thread.currentThread().getName() + "窗口售:第" + t + "张票");                    t++;                } else {                    System.out.println("票卖完了");                }            }            try {                sleep(500);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    public static void main(String[] args) {        Demo1 window1 = new Demo1();        Demo1 window2 = new Demo1();        Demo1 window3 = new Demo1();        window1.start();        window2.start();        window3.start();    }}

实验结果:

实验总结:

 

多线程调度:

Java提供一个线程调度器来监控程序启动后进入可运行状态的所有线程。线程调度器按照线程的优先级决定应调度哪些线程来执行。

– 处于可运行状态的线程首先进入就绪队列排队等候处理器资源,同一时刻在就绪队列中的线程可候多个。Java的多线程系统会给每个线程自动分配一个线程的优先级。

守护线程:

 守护线程的惟一用途是为其他线程提供服务。例如计时线程。

 若JVM的运行任务只剩下守护线程时,JVM就退出了。

 在一个线程启动之前,调用setDaemon方法可将线程转换为守护线程(daemon thread)

实验课总结:本周的实验课相对来说比较轻松,学习了多线程的处理技术,在老师和助教的及讲解下,我对此知识有了更深的理解。

转载于:https://www.cnblogs.com/791683057mxd/p/10151273.html

你可能感兴趣的文章
MySQL工具汇总
查看>>
cookie
查看>>
如何使用Eclipse编译C,C++,JAVA程序
查看>>
php小程序-文章发布系统
查看>>
使用md5加密的登录密码
查看>>
Java 执行jar linux 实例
查看>>
染色(bzoj 2243)
查看>>
理解托管磁盘的原理与优势
查看>>
[原创]python之简单计算器(超详解,只有基本功能+-*/,还有括号处理)
查看>>
python 多进程简单调用
查看>>
APP压力稳定性测试
查看>>
Windows文件操作基础代码
查看>>
1-8
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_04-集合_04 数据结构_2_数据结构_队列
查看>>
Entity Framework操作Oracle数据库实现主键自增问题
查看>>
Leetcode WC-108-03 931-下降路径最小和
查看>>
从“智猪博弈”看所谓“大国责任”
查看>>
Day3:Spring-JDBC、事务管理
查看>>
模块的四种形式
查看>>
教你如何培养幽默感
查看>>