java——多线程——内部类共享同一个外部类对象的成员变量
public class Shop
{
public static void main(String[] args)
{
Outer o=new Outer();
Thread t1=o.getSale("T1 ");
Thread t2=o.getSale("T2 ");
/*Thread t1=new Thread(o,"T1");
Thread t2=new Thread(o,"T2");*/
t1.start();
t2.start();
System.out.println(Thread.currentThread().getName()); } }
class Outer
{
Object temp=new Object();
private int ticket=100;
public Thread getSale(String s)
{
return new Sale(s);
} class Sale extends Thread//implements Runnable//
{ Sale(String s)
{
super(s); }
public void run()
{ while(ticket>0)
{
try
{
Thread.currentThread().sleep(10);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
saletTicket(getName());
} }
private void saletTicket(String s)
{
synchronized (temp)
{
if(ticket>0)
{
System.out.println(getName()+" ticket "+ticket--);
//ticket=tmp;
} } } }
} /*public class Shop {
public static void main(String[] args) {
Outer o = new Outer();
o.getSale("s1:").start();
o.getSale("s2:").start();
}
} class Outer {
private int ticket = 100; public Thread getSale(String s) { return new Sale(s);
} private class Sale extends Thread {
Sale(String s) {
super(s);
} public void run() {
while(ticket > 0){ try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
ticket(getName());
}
}
} public synchronized void ticket(String name){
if (ticket > 0) {
System.out.println(name + " ticket " + ticket--);
}
}
}*/
错误代码如下,这样只会让先抢到资源的线程执行到底。循环应放置在同步区外部
public class Shop
{
public static void main(String[] args)
{
Outer o=new Outer();
Thread t1=o.getSale("T1 ");
Thread t2=o.getSale("T2 ");
Thread t1=new Thread(o,"T1");
Thread t2=new Thread(o,"T2");
t1.start();
t2.start();
System.out.println(Thread.currentThread().getName()); } }
class Outer
{
Object temp=new Object();
private int ticket=100;
public Thread getSale(String s)
{
return new Sale(s);
} class Sale extends Thread//implements Runnable//
{ Sale(String s)
{
super(s); }
public void run()
{ try
{
Thread.currentThread().sleep(10);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} saletTicket(getName()); }
private void saletTicket(String s)
{
synchronized (temp)
{
while(ticket>0)
{
System.out.println(getName()+" ticket "+ticket--);
//ticket=tmp;
} } } }
}
java——多线程——内部类共享同一个外部类对象的成员变量的更多相关文章
- 141、Java内部类之实例化外部类对象
01. 代码如下: package TIANPAN; class Outer { // 外部类 private static String msg = "Hello World !" ...
- Java中内部类揭秘(一):外部类与非静态内部类的”相互可见性“
声明:本博客为原创博客.未经同意,不得转载.原文链接为 http://blog.csdn.net/bettarwang/article/details/27012421. ...
- 深入理解Java中为什么内部类可以访问外部类的成员
内部类简介 虽然Java是一门相对比较简单的编程语言,但是对于初学者, 还是有很多东西感觉云里雾里, 理解的不是很清晰.内部类就是一个经常让初学者感到迷惑的特性. 即使现在我自认为Java学的不错了, ...
- 继承内部类时使用外部类对象.super()调用内部类的构造方法
问题简介 今天在看<Java编程思想>的时候,看到了一个很特殊的语法,懵逼了半天--一个派生类继承自一个内部类,想要创建这个派生类的对象,首先得创建其父类的对象,也就是这个内部类,而调 ...
- 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类
不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中st ...
- “全栈2019”Java第七十五章:内部类持有外部类对象
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 牛客网Java刷题知识点之什么是内部类、为什么要使用内部类、内部类如何使用外部类的属性和方法、成员内部类、局部内部类、静态内部类、匿名内部类
不多说,直接上干货! 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 内部类 ...
- “全栈2019”Java第八十二章:嵌套接口能否访问外部类中的成员?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- C++中内部类访问外部类的私有成员
首先,如果不知道什么是内部类InnerClass的话,就没必要往下看了. 尝试在C++中模仿apple objective-c 的Grand Dispatch简化多线程编程时,使用了boost::fu ...
随机推荐
- Flash Builder 调试器无法连接到正在运行的应用程序(57%)
Flash Builder 调试器无法连接到正在运行的应用程序(57%),可能原因: 1,flashplayer不是debug版. 2,调试器(用debug版flashplayer随便 ...
- 深度学习(dropout)
other_techniques_for_regularization 随手翻译,略作参考,禁止转载 www.cnblogs.com/santian/p/5457412.html Dropout: D ...
- 记录容易忘记的知识点(html 内容)
<xx 表文件名> 导入外部样式表 <link type="text/css" rel="stylesheet" href="xx. ...
- 查看Oracle中是否有锁表的sql
1.查看是否有锁表的sql 代码如下: select 'blocker('||lb.sid||':'||sb.username||')-sql:'|| qb.sql_text blockers, 'w ...
- 解决JQuery.ajax.post乱码问题
问题:昨天在进行项目功能实现时,利用了$.ajax吧数据post给服务,接着保存到cookie中,而数据中是带有中文的 我的post代码: comCarId=encodeURIComponent(co ...
- ASP.NET ashx实现无刷新页面生成验证码
现在大部分网站登陆时都会要求输入验证码,在网上也看了一些范例,现在总结一下如何实现无刷新页面生成验证码. 效果图: 实现方式: 前台: <div> <span>Identify ...
- c# 导出数据到Excel模板
最近在做一个发邮件的功能,客户要求需要导出一个Excel附件,并给了附件的格式, eg: Last Name 姓 First Name 名 Chinese Characters汉字书写(仅大陆人填写) ...
- Linux CPAN Perl 模块安装
当我们想使用某些Perl模块的时候,很可能会遇到当前系统不存在这个模块的情况,这时我们可以通过使用CPAN来对相应的模块进行获取,下面就介绍一下CPAN的使用方法.首先,我们可以用perl -e 'u ...
- 从多列的DataTable里取需要的几列(转)
方法一: 也是广为人知的一种: YourDataTable.Columns.Remove("列名"); 但是这种情况只适合于去掉很少列的情况. 如果有很多列我却只要一两列呢,那就得 ...
- 大前端学习笔记整理【二】CSS视觉格式化模型
1. 概念 在视觉格式化模型中,文档树中的每个元素都将会根据盒模型产生零到多个盒子.这些盒子的布局由如下因素决定: 盒子的尺寸和类型 定位策略(正常文档流,浮动或者绝对定位) 和文档树中其他元素的关系 ...