1. 本周学习总结

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

上周这张图没理解完,继续

2. 书面作业

本次PTA作业题集多线程

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

1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步访问(请出现相关代码)?

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class Account{private int balance;private static Lock lock = new ReentrantLock();public Account(int balance) {super();this.balance = balance;}public int getBalance() {return balance;}public void setBalance(int balance) {this.balance = balance;}void deposit(int money){lock.lock();balance+=money;lock.unlock();}void withdraw(int money){Lock lock=new ReentrantLock();lock.lock();balance-=money;lock.unlock();}
}

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

同步代码块可以指定获取哪个对象上的锁,同步方法只能是当前对象的锁

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


这是普通的id++.的工作流程。在多线程中可能会出现A线程刚要执行加1的时候,B线程把它的temp的值给id,最后出问题。所以就用到互斥,它的原理就是每个对象有一个锁,我获取到这个锁,其他线程就不可以使用

1.4 Java多线程中使用什么关键字实现线程之间的通信,进而实现线程的协同工作?为什么同步访问一般都要放到synchronized方法或者代码块中?

wait()、notify() 等,防止资源冲突

2 交替执行实验总结(不管有没有做出来)

借鉴王威的代码,设定flag来交替使两个线程处于可用的状态。一个为true,另一个必为flase。

3 互斥访问

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

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

3.2 进一步使用执行器改进相应代码(关键代码截图,需出现学号)参考资料:Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask

/*** @author 201521123083* @param args* @throws InterruptedException*/public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stubExecutorService exec = Executors.newCachedThreadPool();for (int i = 0; i < 3; i++) {exec.submit(new Adder());exec.submit(new Subtracter());}exec.shutdown();while(Thread.activeCount()>1);System.out.println(Counter.getId());System.out.println("main end");}
}

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

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


剩余货物可能为00,因为消费者生产者存取速度不一,可能出现库存为0还在取货物的情况;

4.2 使用synchronized, wait, notify

解决该问题(关键代码截图,需出现学号)

package threading;import java.util.ArrayList;
import java.util.List;public class MyProducerConsumerTest {/*** @author 201521123083* @throws InterruptedException*/public static void main(String[] args) throws InterruptedException {Repository repo = new Repository();Thread producer = new Thread(new Producer(repo,100));//放入100个Thread consumer = new Thread(new Consumer(repo,100));//取出100个producer.start();consumer.start();producer.join();consumer.join();System.out.format("main end!仓库还剩%d个货物%n",repo.size());}}class Repository {// 存放字符串的仓库private int capacity = 10;//仓库容量默认为10private List<String> repo = new ArrayList<String>();// repo(仓库),最多只能放10个public synchronized void add(String t) {while (repo.size() == capacity) {try {wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (repo.size() >= capacity) {System.out.println("仓库已满!无法添加货物。");} else {repo.add(t);}notify();}

5 查询资料回答:什么是线程安全?(用自己的话与代码总结,写自己看的懂的作业)

线程安全其实就是处理好共享资源的问题。java的线程安全通过synchronized和Lock来实现

3. 码云上代码提交记录

题目集:多线程

转载于:https://www.cnblogs.com/daizhibin/p/6818160.html

201521123083《Java程序设计》第11周学习总结相关推荐

  1. 20155227 2016-2017-2 《Java程序设计》第九周学习总结

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  2. 20175208 《Java程序设计》第九周学习总结

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  3. 20155313 2016-2017-2 《Java程序设计》第二周学习总结

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  4. 20155226 2016-2017-2 《Java程序设计》第一周学习总结

    20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...

  5. 20175202 《Java程序设计》第九周学习总结

    20175202 2018-2019-2 <Java程序设计>第九周学习总结 教材知识点总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称 ...

  6. 20175227张雪莹 2018-2019-2 《Java程序设计》第九周学习总结

    20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...

  7. 20155305乔磊2016-2017-2《Java程序设计》第九周学习总结

    20155305 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与 ...

  8. 20175317 《Java程序设计》第一周学习总结

    20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...

  9. 20172318 2016-2017-2 《Java程序设计》第一周学习总结

    20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...

  10. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

最新文章

  1. Java面向对象学习笔记 -- 6(内部类、Timer)
  2. Codeforces Round #268 (Div. 1) C. Hack it! 数位dp + 构造数位
  3. mysql搜索引擎_常见的 mysql 搜索引擎
  4. 张一鸣:优秀年轻人的五个特点
  5. CTF:攻防世界web PART01
  6. oracle instr函数 判断字段中是否有换行符
  7. C# 在PPT幻灯片中创建图表
  8. 苹果手表出现,请在iphone 打开apple watch 应用,前生Passcode,轻点密码重试
  9. 基于SSM+Bootstrap+MYSQL演唱会网上订票系统
  10. 深度deepin安装腾达U12无线网卡驱动
  11. VS2017 ReportViewer报表控件及设计器安装方法
  12. 【转摘】芯片的本质是什么
  13. 便利贴--3{js高德地图获取路线路径点--官方方法一定要加个安全密钥..这个不用}
  14. 我是一个没有感情的杀手
  15. C# 模拟POST上传图片
  16. PFO(DMP end capped) cas:195456-48-5聚合物光电材料
  17. webaudio_WebAudio Deep Note,第5部分:增益节点
  18. QT 显示gif 和 flash 动画技巧
  19. 微信小程序解决跳转时携带参数乱码的问题 ?
  20. 挑战52天背完小猪佩奇(第01天)

热门文章

  1. 【恋上数据结构】MySQL的索引底层为何使用 B+树?
  2. 校招刷题---java选择题笔记03
  3. Windows设置程序 .bat 开机自启动
  4. pyspider抓取数字货币价格bitcoin
  5. 运算除法的计算机函数,2、Python基础--除法、常用数学函数(示例代码)
  6. 这个坑,坑死职场年轻人
  7. 手把手教你从0-1做一张酷炫驾驶舱,让老板对你赞不绝口
  8. js常用内建对象之:Array
  9. oracle mysql安装图解 linux_Linux上Oracle 11g安装步骤图文详解
  10. php替换局部大小写字母,php替换字符串中的一些字符(区分大小写)的函数str_replace()...