java线程学习(二)
多个线程并发抢占资源是,就会存在线程并发问题,造成实际资源与预期不符合的情况。这个时候需要设置“资源互斥”。
1.创建资源,这个地方我创建了一个资源对象threadResource,对象内有一个属性num。
package com.bluej.javaj.thread.first; /**
* 使用同步方式-资源互斥
* @author xingdongjie
*
*/
public class ThreadResource { private int num=100; /**
* 同步方法方式
*/
public synchronized void sell(){
System.out.println(Thread.currentThread().getId());
num--;
System.out.println("---出售一个,剩余"+num+"个资源");
} /**
* 同步代码块方式
*/
public void sell2(){
synchronized(this){
System.out.println(Thread.currentThread().getId());
num--;
System.out.println("---出售一个,剩余"+num+"个资源");
}
} }
ThreadResource代码示例
ThreadResource类内有两个方法,用来实现资源互斥,两种方法机制相同都是使用同步锁,表现形式不同,推荐使用第二种sell2()方法。执行一次sell()方法,num做减一操作。
2.创建多线程,执行抢占资源,线程获取对象后调用sell()方法。
package com.bluej.javaj.thread.first;
public class ThreadMethod {
//使用static、final是为了让线程可以直接拿到对象,无须传参
private static final ThreadResource threadResource= new ThreadResource();
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
//使用for遍历创建多个线程,并在线程内执行threadResource.sell()
new Thread(new Runnable() {
@Override
public void run() {
threadResource.sell();
}
}).start();
}
}
}
ThreadMethod 线程示例
java线程学习(二)的更多相关文章
- Java开发学习(二十二)----Spring事务属性、事务传播行为
一.事务配置 上面这些属性都可以在@Transactional注解的参数上进行设置. readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true. timeout ...
- Java开发学习(二十四)----SpringMVC设置请求映射路径
一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...
- Java开发学习(二十五)----使用PostMan完成不同类型参数传递
一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发
一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...
- Java开发学习(二十八)----拦截器(Interceptor)详细解析
一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...
- java 线程学习
转载:详见处http://lavasoft.blog.51cto.com/62575/27069 Java多线程编程总结 下面是Java线程系列博文的一个编目: Java线程:概念与原理 ...
- java线程学习(一)
1.简介 java基础知识部分线程创建的三种方式.线程执行的样例. 代码地址:http://git.oschina.net/blue_phantom/javaj 包位置:package com.blu ...
- java线程学习——汉堡销售问题
汉堡店中有一个负责做汉堡的厨师,一个负责销售的营业员,用java线程表示他们的营业过程: 问题原型就是生产者与消费者的问题. 首先定义一个汉堡包箱子类与几个相关的变量类: public class H ...
随机推荐
- PHPcms 把盛大登陆换成人人网登陆
首先要确保你的 phpcms是比较新的版本, v9.3以后的吧 这里说明一个函数 rawurlencode() 本函数将字符串编码成 URL 的字符串专用格式,特殊的字符会转换成百分比符号后面加上二个 ...
- js原生设计模式——7原型模式之new+call(this)组合应用再探讨实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- CentOS6+MySQL5.6二进制安装
一般我们安装mysql采用二进制安装的方式就足以满足我们的生产环境了,不过需要我们配置my.cnf文件 从官网下载二进制MySQL,选择Linux-Generic,最后这两个是二进制包 http:// ...
- 列表视图(ListView)和ListActivity
ListView是手机系统中使用非常广泛的一种组件,它以垂直列表的形式显示所有列表项. 创建ListView有如下两种方式: 直接使用ListView进行创建. 让Activity继承ListActi ...
- Blend4 的安装和配置
Microsoft Expression Blend作为一款功能齐全的专业设计工具,可用来针对基于 Microsoft Windows 和基于 Microsoft Silverlight 1.0 的应 ...
- java解析XML,并生成文档
一.Java中XML的四种方法 Java学习者须知:Java中XML的四种方法 java xml学习总结(4中方法的例子介绍) JDOM解析XML Dom4j解析XML
- win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解决办法
1)安装Oracle 11g 64位2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0)下载 instantclient-basic-win ...
- Java Swing paint repaint update 方法的关系
Java Swing paint repaint update 方法的关系: 参考:http://blog.csdn.net/xiaoliangmeiny/article/details/691665 ...
- Cent OS U盘安装不成功问题
环境: CentOS 版本:CentOS-7-x86_64-DVD-1611 镜像烧写工具:UltraISO 9.5.3.2901,Win7 硬件:J1900+16G SSD+4G RAM,金士顿16 ...
- Mockito教程
Mockito教程 2017-01-20 目录 1 Mockito 介绍 1.1 Mockito是什么? 1.2 为什么需要Mock 1.3 Stub和Mock异同 1.4 Mockito资 ...