zoukankan      html  css  js  c++  java
  • 201621123033 《Java程序设计》第11周学习总结

    1. 本周学习总结

    1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容。

    2. 书面作业

    本次PTA作业题集多线程

    1. 源代码阅读:多线程程序BounceThread

    1.1 BallRunnable类有什么用?为什么代码中需要调用Thread.sleep进行休眠?

    该类调用了小球移动的函数,并在移动之后对界面进行重绘。
    线程调度,让出CPU给其他线程。

    1.2 Ball.java只做了两件事,这两件事分别是什么?BallComponent对象是干什么的?其内部的ArrayList有什么用?程序运行过程中,生成了几个BallComponent对象?该程序使用了多线程技术,每个小球是分别在不同的线程中进行绘制吗?

    Ball.java实现了小球的移动和获取小球的物理信息(即大小和坐标)。
    BallComponent对象是用来添加小球和画小球,其内部的ArrayList用来放置小球。运行过程中,生成了一个BallCompoent对象。
    不是在不同的线程中进行绘制的。

    1.3 选做:程序改写:程序运行时,每个小球都是从固定位置出发。如何改写该程序,使得当点击start时,每个小球可以从不同位置出发、以不同的步进移动?

    1.4 选做:不同小球的移动轨迹一模一样。改造程序,使得每个小球运行轨迹不完全一样,比如有的可以走余弦轨迹、有的可以走方波轨迹、有的走布朗运动、有的走五角星,等等。

    2. 实验总结:题集(多线程)

    2.1 题目:Thread、PrintTask、Runnable与匿名内部类。

    并回答:a)通过定义Runnable接口的实现类来实现多线程程序比通过继承自Thread类实现多线程程序有何好处?b) 6-1,6-3,6-11实验总结。
    a)继承Thread: 线程代码存放Thread子类run方法中。
    实现Runnable,线程代码存在接口的子类的run方法。
    优势:

    • 适合多个相同代码的线程去处理同一个资源的情况。
    • 避免了单继承的局限性。
    • 增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。

    b)
    6-1:注意要有有参构造函数,循环打印数字后再打印标识信息(放在循环外)。
    6-3:注意匿名内部类书写格式(很容易出现缺括号等等情况)。
    6-11:这题基本代码和6-1差不多...就是最后输出标识信息不一样。

    2.2 使用Lambda表达式改写6-3

    //改写
    Thread t1 = new Thread(
            		()->{
            		System.out.println(mainThreadName);
            		System.out.println(Thread.currentThread().getName());
            		System.out.println(Arrays.toString(Thread.class.getInterfaces()));
            		}
       
            );
    

    2.3 题目:6-2(Runnable与停止线程)。回答:需要怎样才能正确地停止一个运行中的线程?

    使用boolean标志来使线程中的run()方法退出。注意:不要使用stop()方法,因为可能会引发某些问题。

    private volatile boolean flag = false;  
    public void stopMe(){
    		flag=true;
    	}
    

    3. 互斥访问

    3.1 修改TestUnSynchronizedThread.java源代码使其可以同步访问。(关键代码截图,需出现学号)

    4. 互斥访问与同步访问

    完成题集6-4(互斥访问)与6-5(同步访问)

    4.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法可以使用synchronized实现互斥同步访问,使用代码说明(请出现相关代码及学号)?

    //201621123033
    class Account1{
    	private int balance;
    	
    	private static Lock lock=new ReentrantLock();
    	
    	public Account1(int balance) {
    		this.balance = balance;
    	}
    
    	public int getBalance() {
    		return balance;
    	}
    
    	public void setBalance(int balance) {
    		this.balance = balance;
    	}
    
    	public void deposit(int money){
    		lock.lock();
    		balance=balance+money;
    		lock.unlock();
    	}
    	
    	public synchronized void withdraw(int money){
    		lock.lock();
    		balance=balance-money;
    		if(balance<0) 
    	        throw new IllegalStateException(balance+"");	
    		lock.unlock();
        }
    
    }
    

    4.2 同步代码块与同步方法有何区别?

    同步方法是在方法名前加synchronized来修饰,同步代码块是在方法内部使用synchronized来实现加锁。由此可看出,同步方法作用范围明显比同步代码块来的大。

    4.3 实现互斥访问的原理是什么?请使用对象锁概念并结合相应的代码块进行说明。当程序执行synchronized同步代码块或者同步方法时,线程的状态是怎么变化的?

    对共享资源的访问不能同时进行,当一个任务使用共享资源的时候对其上锁,这时其他任务就不能访问这个资源直到其被解锁。

    class Counter {
    	private static int id = 0;
    
    	public synchronized static void addId() {
    		id++;
    	}
    
    	public synchronized static void subtractId() {
    		id--;
    	}
    
    	public static int getId() {
    		return id;
    	}
    }
    

    分析如上代码:

    1. 线程A开始工作,id被上锁,读取id的值为0
    2. 线程A将id的值+1,此时id的值为1,id被释放
    3. 线程B开始工作,id被上锁,读取id的值为1
    4. 线程B将id的值-1,此时id的值为0,id被释放

    4.4 Java多线程中使用什么关键字实现线程之间的通信,进而实现线程的协同工作?

    • synchronized
    • Object类的wait()、notify()

    5. 线程间的合作:生产者消费者问题

    5.1 运行MyProducerConsumerTest.java。正常运行结果应该是仓库还剩0个货物。多运行几次,观察结果,并回答:结果正常吗?哪里不正常?为什么?

    运行结果不正常,显示还有货物剩余。因为Producer和Consumer的存取货速度不一样。

    5.2 使用synchronized, wait, notify解决该问题(关键代码截图,需出现学号)


    6. 面向对象设计作业-图书馆管理系统

    6.1 系统的功能模块表格,表格中体现出每个模块的负责人。

    6.2 运行视频

    6.3 讲解自己负责的模块,并粘贴自己负责模块的关键代码(出现学号及姓名)。

    3.码云及PTA

    题目集:多线程

    3.1. 码云代码提交记录

    在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
    必须出现几个要素:提交日期-用户名(姓名与学号)-不提交说明

    3.2 截图"多线程"PTA提交列表

    需要有两张图(1. 排名图。2.PTA提交列表图)


    3.3 统计本周完成的代码量

    需要将每周的代码统计情况融合到一张表中。

    周次 总代码量 新增代码量 总文件数 新增文件数
    3 547 547 12 12
    5 971 424 20 8
    6 1577 606 29 9
    7 2187 1216 41 21
    8 2793 606 49 8
    9 3040 247 56 7
    10 3617 577 63 7
    11 3911 294 71 8
    12 4409 498 82 11
  • 相关阅读:
    poj1321(棋盘问题)
    poj3009(Curling 2.0)
    站点 1访问非本站点下面的web.config文件需要的权限
    VS2010 Web网站发布详解
    服务禁止旁注,安全设置
    在Windows2012下安装SQL Server 2005无法启动服务的解决办法
    Server-U与IIS端口占用问题解决
    Server-U_详细配置
    创建维护计划时,提示“代理XP”组件已作为此服务器安全配置的一部分被关闭
    SQL SERVER 2005如何建立自动备份的维护计划
  • 原文地址:https://www.cnblogs.com/holmec/p/7954126.html
Copyright © 2011-2022 走看看