随笔分类 - JAVA初步认识-第十三章
摘要:一. 接下来将的也是同步的一个小知识点,我们在使用同步的时候,会有这么一种现象,死锁。 什么情况下,是锁死?在我们程序当中,最常见的体现形式之一就是同步的嵌套。形象的说法是:两个人各有一只筷子,都想要吃饭,结果争执之下,谁都吃不了。和谐的情况就是,筷子给对方,对方吃饭之后,再连自己的筷子一起还回来,
阅读全文
摘要:一. 单例设计模式之前在谈论的时候,有一部分涉及线程的问题,因此只讲述了一半。现在将其重新描述一下。 单例分为两种表现形式,懒汉和饿汉。 二. 多线程下的单例:饿汉式 懒汉式(延迟加载单例设计模式) 什么时候用到这个对象,再加载它。这个例子并不准备运行,知道就可以。 现在准备将其结合到多线程基础上来
阅读全文
摘要:一. 接下来更加深入地讲解一下,示例还是卖票,但是程序稍作了修改。 也就是调用的同步函数有多个修饰符,有了static的存在。 由于show函数是静态的,访问的num,那么num也要修改为静态的变量。其实num静不静态都一样,都是共享数据。 在加了两个静态修饰符后,再次编译运行一下程序。 DOS结果
阅读全文
摘要:一. 至于同步函数用的是哪个锁,我们可以验证一下,借助原先卖票的例子 对于程序中的num,从100改为400,DOS的结果显示的始终都是0线程,票号最小都是1。 票号是没有问题的,因为同步了。 有人针对只出现0线程,说是票数太少,0线程都给操作完了。即使改成四万张票,也是0线程操作。 正常来说,四个
阅读全文
摘要:一. 现在用一个示例,将刚才所讲的同步内容练习一下。 对于一个函数中,存在多个线程,如果出现安全隐患,这隐患是在哪儿?以及如何通过同步函数来解决。(相当于一个实操) 存一百,存三次是共同的,两个人执行的是同样的动作。 线程开启之前,要先有任务。这个任务要么叫爹覆盖我的方法,要么实现Runable把你
阅读全文
摘要:一. 日后开发的时候,看到这样一种现象:看到了数据的错误是线程安全问题引发的,紧跟着就采取了同步措施,没想到安全问题依然存在。 这种情况很痛苦,因为这时已经没有解决方案了。 看到问题,以为同步就能解决问题,没想到解决不了。(是否说安全问题,正确地使用同步都可以解决?) 这种问题是怎么造成的呢?这里必
阅读全文
摘要:一. 同步的原因 synchronized的代码块的封装作用,我们已经认识到了。但是它到底是怎么起到作用,现在来讨论一下。 这里面有一个对象,我们先简单地将它理解为标志位。这标志位怎么用的呢? 现在假想标志位有0和1,如果先来的默认值是1。这时,来了四个不同编号的线程,0~3。 0线程进来后,syn
阅读全文
摘要:一. 怎么解决程序的安全性问题。 就相当于不给其他线程机会,自己独占。 对于多条语句的封装通常用什么封装?花括号,也就是代码块。 我们现在需要这个代码块具备一定的功能,多个线程只能每次有一个线程进来操作。这个我们也可以用一个关键字来标识。 synchronized是同步的意思, 写同步代码块的时候,
阅读全文
摘要:一. 对原因进行分析一下,为什么之前没事,现在就有事。 在栈的里面,我们就不画主线程了,有四条线程路径,有自己的run方法。而这run方法如果里面写for循环,写上x的话,每个线程都有一份。 冲突吧?不冲突,都使用自己的,而当我们去卖票的时候,在运行堆里面的这个num,这个num就是多个线程所共享的
阅读全文
摘要:一. 引言 接着看,把售票的问题给说完,这里涉及到一个小问题。 在我们进行线程任务封装,并进行线程对象创建的时候,我们发现确实通过四个线程能够将一百张票卖完。但是卖票的时候,会不会出现一些小问题呢?分析整个程序给大家展示一下。 现在有四个线程,都到了run方法中来运行。大家都知道,每个线程所属的栈区
阅读全文
摘要:一. 需求:简单卖票程序。 怎么卖:多个窗口卖票。 一号窗口在卖票的时候,二号窗口,三号窗口也在卖票,这是同时在操作。也就是多线程。 Ticket类中的卖票代码必须要被多个线程所执行。 需求是卖票,那么名词就是票,对票进行类的描述,怎么卖票自己知道。因此,Ticket类里面必须要定义卖的方法。 由于
阅读全文
摘要:一. 讲述一个小例子,展现一下多线程技术。 任何一个例子都有需求: 资源是同一个,通过四个窗口往外发,是并发。四个窗口用的是同一个动作,都是卖票,但是这个动作是同时进行。 先不写思路,先简单描述一下, 上面截图中的程序有一个问题,在其编译运行之后,四个线程都卖出了100张票。本来只有100张票,现在
阅读全文
摘要:一. 梳理两种线程创建方式 Runable接口的体现形式交代完了,现在说说为什么这么做,同时说说Runable接口干嘛用的,交代一下设计思想。 以上图为例来讲述,相当于规定了前提条件Student类有父类Person类。 现在Student类中有封装Code()代码块,想要让Code()这部分和St
阅读全文
摘要:一. 讨论一下第二中方式中的一些细节问题 这里会产生一些疑问,Thread类有自己的线程方法(我估计是run方法),d也有自己的run方法。那么d传递到Thread中,那么t1既具备Thread类的run,又具备d的run,那它运行的是谁的? 通过刚才演示的来看,不传递运行的是Thread类自己的,
阅读全文
摘要:一. 引言 现在把之前的示例还原一下,创建线程的第一种方式。(继承创建子类对象,覆盖run方法) 之前的例子如上,存在着三个线程(目前自己能够理解认识的),主线程和自己创建的两个线程。cpu在这三者之间进行切换。 现在遇到一个瓶颈,Demo类当中有一部分代码,我们需要用到多线程执行,我们就继承了Th
阅读全文
摘要:一. 概述 通过一个示例演示了一下,多线程技术的一个特点,它有一个并发的特点,而且具备随机性。因为cpu不断地切换造成的。 线程具备这么几种常见的状态,为什么这么说呢?刚开始我们把它创建出来,通过它的方法使它运行起来。这就发现,创建不代表运行。你必须用start给它开启了,才有资格去运行,然后它开始
阅读全文

浙公网安备 33010602011771号