`
piperzero
  • 浏览: 3487562 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

11级_Java_曹建波9.04 多线程2

 
阅读更多

互斥锁

每个对象都对应于一个可称为互斥锁的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。

Java对象默认是可以被多个线程共用的,只是在需要时才启动互斥锁机制,成为专用对象。

关键字synchronized用来与对象的互斥锁联系

当某个对象用synchronized修饰时,表明该对象已启动互斥锁机制,在任一时刻只能由一个线程访问,即使该线程出现堵塞,该对象的被锁定状态也不会解除,其他线程任不能访问该对象。

synchronized关键字的使用方式有两种:

用在对象前面限制一段代码的执行(同步代码块)
public void push(char c){

sychronized(this){
data[index]=c;
index++
}
}

用在方法声明中,表示整个方法为同步方法

同步好处:决了线程安全问题

同步弊端

降低了运行效率(判断锁是较为消耗资源的)

同步嵌套,容易出现死锁

死锁
两个线程AB用到同一个对象s(s为共享资源),且线程A在执行中要用到B运行后所创造的条件。在这种前提下A先开始运行,进入同步块后,对象s被锁定,接着线程A因等待B运行结束而进入阻塞状态,于是B开始运行,但因无法访问对象s,线程B也进入阻塞状态,等待s被线程A解锁。最终的结果:两个线程互相等待,都无法运行。

多线程模拟售票

package com.hbsi;

class Tickets {

privateinttickets;

public Tickets() {

tickets = 10;

}

publicsynchronizedvoid action(Stringname) {

System.out.println(name + "卖了第" + tickets + "号票");

tickets--;

}

}

class TicketsThread extends Thread {

Ticketst;

Stringname;

publicTicketsThread(Tickets t, String name) {

this.t = t;

this.name = name;

start();

}

publicvoid run() {

try {

for (int i = 0; i < 5; i++){

t.action(name);

Thread.sleep(20);

}

}catch (InterruptedException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}

}

}

publicclass Ticket2 {

/**

* @param args

*/

publicstaticvoid main(String[]args) {

Tickets t=new Tickets();

TicketsThreadd1=new TicketsThread(t, "小张");

TicketsThreadd2=new TicketsThread(t, "小王");

}

}

分享到:
评论

相关推荐

    grpcio-1.63.0-cp38-cp38-linux_armv7l.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    SQLyog-13.1.3-0.x86Community.exe

    SQLyog-13.1.3-0.x86Community

    VB自动出题题库系统设计(源代码+系统).rar

    计算机专业毕业设计VB精品论文资源

    debugpy-1.0.0b2-cp35-cp35m-manylinux1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    实战自学python如何成为大佬(目录):https://blog.csdn.net/weixin-67859959/artic

    实战自学python如何成为大佬(目录):https://blog.csdn.net/weixin-67859959/artic

    HTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 - games.zip

    HTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- games.zipHTML5小游戏【狂抽男朋友耳光】游戏源码分享下载 --- ga

    个人用电量和天气,该数据集包括中国北方某城市一个家庭的用电量

    该数据集包括中国北方某城市一个家庭的用电量。 时间段为2018年11月1日至2021年11月1日。

    源代码-ExcelToAccess批量导入数据 v1.0.zip

    源代码-ExcelToAccess批量导入数据 v1.0.zip

    基于python开发的生产从shp到pbf格式的矢量地图切片+源码(期末大作业)

    基于python开发的生产从shp到pbf格式的矢量地图切片+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python开发的生产从shp到pbf格式的矢量地图切片+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python开发的生产从shp到pbf格式的矢量地图切片+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python开发的生产从shp到pbf格式的矢量地图切片+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python开发的生产从shp到pbf格式的矢量地图切片+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~

    grpcio-1.46.3-cp39-cp39-musllinux_1_1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    h5py-2.6.0-cp36-cp36m-manylinux1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    grpcio-1.57.0-cp310-cp310-manylinux_2_17_aarch64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    搜索链接java(结合lucene)版的公交搜索系统-javaso

    [搜索链接]java(结合lucene)版的公交搜索系统_javaso

    SQLyog-13.1.5-0.x64Community.exe

    SQLyog-13.1.5-0.x64Community

    grpcio-1.49.1-cp311-cp311-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    VB文档管理系统设计(源代码+论文+开题报告+答辩PPT).rar

    计算机专业毕业时间之VB精品论文源代码资源

    grpcio-1.62.2-cp311-cp311-linux_armv7l.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    grpcio-1.48.1-cp39-cp39-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    SQLyog-12.3.2-0.x64Community.exe

    SQLyog-12.3.2-0.x64Community

Global site tag (gtag.js) - Google Analytics