1. 本章学习总结

2. 书面作业

Q1.互斥访问与同步访问

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

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

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

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

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

1.1 在Java1.5之后,可使用java.util.concurrent.locks包提供的操作方法替代synchronized机制。

测试代码:

public class Main {
static Lock lock=new ReentrantLock();
public static void main(String[] args) { lock.lock(); //若锁处于空闲状态,则获得锁;若其他进程获得锁,则禁用当前进程 } public static invoke()
{
lock.unlock(); //释放锁
}
}

Lock的出现其实是同步机制的升级版,由于运行到synchronized修饰的代码块之外时,进程便自动解除block状态,因此通过Lock的使用使用户可以更自由控制锁的使用。

1.2

当一个进程获得了某个object的锁时,其他进程将无法访问该obj内的同步代码块,但可以访问非同步代码块。而同步方法则是限制了进程对于obj的访问。

1.3

为了实现互斥访问,在编程中引入了互斥锁的概念,每个对象都有一个互斥锁的标记,来保证在同一时刻只能有一个进程访问该对象。

测试代码:

class Account{
private int balance; public Account(int balance) {
this.balance = balance;
} synchronized void deposit(int money)
{
this.balance+=money;
} synchronized void withdraw(int money)
{
this.balance-=money;
} public int getBalance() {
return balance;
} }

将实现类Account中的俩方法都上锁,就意味着当某个进程调用方法时,若其他进程也调用到该方法,那么便进入block状态,当方法锁释放时重新进入running状态。

1.4

使用wait()、notify()可以用来实现线程之间的通信协作。使用synchronized关键字的原因便是防止多个线程同时访问同一对象导致的冲突。

Q2.交替执行###

实验总结(不管有没有做出来)

Q3.互斥访问###

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

3.2 进一步使用执行器改进相应代码(关键代码截图,需出现学号)

参考资料:Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask

3.1

//201521123055
public static synchronized void addId() {
id++;
} public static synchronized void subtractId() {
id--;
}

两个函数加上synchronized关键字即可

3.2

    ExecutorService ec= Executors.newCachedThreadPool();

    for(int i=0;i<3;i++)
{
ec.execute(new Adder());
}
for(int i=0;i<3;i++)
{
ec.execute(new Subtracter());
} ec.shutdown();
ec.awaitTermination(1, TimeUnit.DAYS);

关键是调用awaitTermination()来完成join效果。

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

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

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

4.1

有时候会出现还剩十个货物,因为存取的速度不同导致的。

4.2

//201521123055
public synchronized void add(String t) {
while (repo.size() == capacity) {
try{
wait();
}catch (Exception e)
{
e.printStackTrace();
}
} repo.add(t);
notifyAll(); }
public synchronized void remove() {
while (repo.size() == 0) {
try{
wait();
}catch (Exception e)
{
e.printStackTrace();
}
} repo.remove(0);
notifyAll();
}

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

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用

听起来是有点糊涂,打个比方就是,俩人都要去图书馆借同一本书,A先弄到手,那B去借肯定是借不到的,做到同一时间只有一个线程调用某一资源,就是线程安全。保证线程安全是很重要的,因为多线程中很容易对资源的调用产生问题,这时候做到唯一性是很必要的。

3. PTA实验总结及码云上代码提交记录

3.1

3.2

201521123055 《Java程序设计》第11周学习总结的更多相关文章

  1. 201521123045 <java程序设计>第11周学习总结

    201521123045 <java程序设计>第11周学习总结 1. 本周学习总结 2. 书面作业 2. 书面作业 Q1.1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问 ...

  2. 201521123027 <java程序设计>第11周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2.书面作业 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchro ...

  3. 2018面向对象程序设计(Java)第11周学习指导及要求

    2018面向对象程序设计(Java)第11周学习指导及要求 (2018.11.8-2018.11.11)   学习目标 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: ...

  4. 面向对象程序设计(JAVA) 第11周学习指导及要求

    2019面向对象程序设计(Java)第11周学习指导及要求 (2019.11.8-2018.11.11)   学习目标 理解泛型概念: 掌握泛型类的定义与使用: 掌握泛型方法的声明与使用: 掌握泛型接 ...

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

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

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

    <Java程序设计>第九周学习总结 主要内容 MySQL数据库管理系统 1.下载 2.安装 启动MySQL数据库服务器 1.启动 2.root用户 MySQL客户端管理工具 建立连接 建立 ...

  7. 20175209 《Java程序设计》第九周学习总结

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

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

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

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

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

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

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

随机推荐

  1. [attribute|=value]和[attribute^=value]选择器区别

    1.[attribute|=value] [attribute|=value]选择器说明:http://www.w3school.com.cn/cssref/selector_attribute_va ...

  2. Velocity.js的使用

    前面的话 Velocity是一款优秀的JS动画库,完全可以作为jQuery的animate的替代品.需要动画功能时,使用Velocity是一个好选择.本文将详细介绍Velocity.js的使用 概述 ...

  3. 创建Windows服务(C++)

    这次我们来创建一个windows本地服务,需要有以下功能: 安装服务. 卸载服务. 手动启动服务. 开机自动启动服务. 控制服务(停止.暂停.恢复.启动). 服务概念及介绍 看下图,一切尽在不言中了( ...

  4. Andrew Ng机器学习课程笔记--week8(K-means&PCA)

    Unsupervised Learning 本周我们讲学习非监督学习算法,会学习到如下概念 聚类(clustering) PCA(Principal Componets Analysis主成分分析), ...

  5. windows 10 安装tensorflow

    人工智能一浪接一浪,随着谷歌公布tensorflow源码,尤其是支持windows 10平台的python3.5以上版本,更是让更多人都想用windows操作tensorflow. 第一次安装,也不知 ...

  6. What is the difference between Debug and Release in Visual Studio?

    "Debug" and "Release" are actually just two labels for a whole slew of settings ...

  7. Struts2拦截器配置实例

    拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 * 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链. * 责任链每一个节 ...

  8. JSP知识点大致介绍1

    解释:当jsp写好,运行服务器,还没有发出请求(写网址按Enter),Tomcat的work下是没有字节码文件的.当写网址:localhost:8888/xxxx/index.jsp按Enter,运行 ...

  9. 剑指Offer第36题—Java版

    本题使用归并排序的思想,结合归并排序,写出的算法解. //数组中的逆序对 public static int InversePairs(int[] array){ if(array==null||ar ...

  10. WP开发图片保存到独立存储并从独立存储中读取

    需要添加引用命名空间 using System.IO; using System.IO.IsolatedStorage; 1.将图片保存到独立存储空间 using (IsolatedStorageFi ...