摘要:
wait() 等待,如果一个线程执行了wait方法,那么该线程就会进去一个以锁对象为标识符的线程池中等待 notity() 唤醒,如果一个线程执行了notity方法,那么就会唤醒以锁对象为标识符的线程池中等待线程的其中一个(至于唤醒哪一个,不能确定) notifyAll() 唤醒所有的线程 wait 阅读全文
摘要:
需求:三个窗口,卖50张票,卖完截至 代码如下: 疑问:为什么我们的共享资源为什么不需要加static修饰?(其实这个是我没注意的) 原来我们如果用第二个方式的话,可以看出上面代码中,我们只需要实例化一个runnable的实现类的, 其实我们加了static修饰其实也没有影响,只是加了,它的生命周期 阅读全文
摘要:
线程实现方式二: 1.自定义一个类实现runnable接口 class Thread implements Runnable 查看源代码,我们可以知道Thread实现了runnable接口 runnable中只有一个run抽象类 2.实现run方法,把自定义线程的任务定义在run方法里面 3.创建一 阅读全文
摘要:
死锁: 出现死锁的原因:线程A等待线程B释放锁资源,同时线程B等待线程A释放资源 可能出现死锁的情况: 1.存在2个或者2个以上的线程 2.存在2个或者2个以上的共享资源 需求: 有2个人要看电视,狗蛋有遥控器,张三有电池。只有电池和遥控器都有了才能看电视 代码如下: 可以发现张三拿到了电池却怎么也 阅读全文
摘要:
方式二:同步函数 通俗讲:就是用synchronized修饰的函数 同步函数注意事项: 1.如果一个同步函数是非静态的,那么它的所对象就是this对象(函数调用者对象), 如果一个同步函数的锁对象是静态的,那么锁对象就是当前函数所属字节码对象(class文件) 2.同步函数的锁是固定的,不能由我们来 阅读全文
摘要:
解决线程问题: 方式一:同步代码块(synchronized) 语法: synchronized ("锁对象") { //需要锁定的代码 } 解决线程安全问题原理: 当我们使用同步代码块时,就当与给此段语句上了一个锁,当一个线程A进去的时候,锁的状态会从开变成关,后面的线程是进不来的。 当进去的线程 阅读全文
摘要:
需求:三个窗口同时售卖50张票 代码如下: 疑问:怎么每个窗口都卖了50号的票,本来只有50张票,怎么卖出了150张的票呢? 原因:因为票数是静态的成员变量,静态的成员变量会在每个对象中都会维护一份数据 解决方案:把票数变成静态的成员变量,共享给三个对象 代码如下: 疑问:怎么又把50号票卖了三次呢 阅读全文
摘要:
1.构造方法 Thread() 分配新的 Thread 对象。 Thread(String name) 分配新的 Thread 对象并指定线程名字 2.方法 1)setName(String name) 设置线程的名字 public final void setName(String name) 2 阅读全文
摘要:
1.进程 定义:正在进行的程序叫作一个进程。进程负责了内存空间的划分 疑问:windows号称是多任务的操作系统,那么是同时运行多个程序的吗? 从宏观角度:windows确实是同时运行多个应用程序 从微观角度:cpu做了快速的切换动作,只是太快了,我们肉眼看不出切换而已 2.线程 定义:线程在一个进 阅读全文
摘要:
1.Random class Random implements java.io.Serializable 下面是一个简单验证码的代码: 注意:nextInt调用此方法可以返回int类型的指定范围的数据 如果要调用其他类型的,只需要调用相对应的方法即可 阅读全文