并发与多线程
chen-sx
程序员一枚
展开
-
多线程之售票安全版
下面是安全版的售票程序/*通过分析,发现,打印出0,-1,-2等错票。多线程的运行出现了安全问题。问题的原因: 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完, 另一个线程参与进来执行。导致共享数据的错误。解决办法: 对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。Java对于多线程的安全问题提供了原创 2015-08-05 16:18:42 · 565 阅读 · 0 评论 -
多线程之售票
1、多线程中一个线程不能多次启动,虽然可能程序能运行但是会报异常 此多线程售票程序虽然能实现简单功能,但是有安全问题, 上图中第99张票一共买了两次多线程之售票安全版售票/*需求:简单的卖票程序。多个窗口同时买票。创建线程的第二种方式:实现Runable接口步骤:1,定义类实现Runnable接口2,覆盖Runnable接口中的run方法。 将线程要运行的代码存放在该run原创 2015-08-05 15:57:12 · 695 阅读 · 0 评论 -
线程面试题
面试题面试题:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序 public class ThreadTest { public static void main(String[] args){ new ThreadTest().init(); }原创 2016-04-27 21:16:38 · 316 阅读 · 0 评论 -
Lock锁
import java.util.concurrent.locks.*;class ProducerConsumerDemo2 { public static void main(String[] args) { Resource r = new Resource();Producer pro = new Producer(r); Consumer con = new Cons原创 2015-10-17 10:49:00 · 307 阅读 · 0 评论 -
停止线程方法
/* stop方法已经过时。如何停止线程? 只有一种,run方法结束。 开启多线程运行,运行代码通常是循环结构。只要控制住循环,就可以让run方法结束,也就是线程结束。特殊情况: 当线程处于了冻结状态。 就不会读取到标记。那么线程就不会结束。当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。 强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。Thread类提原创 2015-10-17 10:48:20 · 453 阅读 · 0 评论 -
同步锁
/* 如果同步函数被静态修饰后,使用的锁是什么呢?通过验证,发现不在是this。因为静态方法中也不可以定义this。静态进内存是,内存中没有本类对象,但是一定有该类对应的字节码文件对象。 类名.class 该对象的类型是Class静态的同步方法,使用的锁是该方法所在类的字节码文件对象。 类名.class */ class Ticket implements Runnable { pr原创 2015-10-17 10:46:51 · 300 阅读 · 0 评论 -
java并发编程实践
java并发编程实践读书笔记线程的粗粒度将会给性能带来极大影响可见性在一个线程中也许无法确保能看到另一个线程写入的值,所以需要一定的同步机制Volatile关键字Java语言提供了一种稍弱的同步机制,即是volatile变量,当声明为volatile时,编译和运行时将会注意到该变量是共享的,不会被缓存到寄存器或其他处理器不可见的地方,因此每一次将会返回最新写原创 2016-05-21 19:26:40 · 596 阅读 · 0 评论