
线程
LM_AC
本人博客原创内容只是个人观点,若有错误,请大神指正.
展开
-
有相同资源,不同操作的线程
1 . 需求:男朋友往银行卡存钱,女朋友取同张银行卡的钱,用线程实现这个过程. (其中,男存钱,女取钱是不同操作,但是银行卡的钱是共享资源.)这就属于有相同资源,不同操作的线程 2 . 男朋友为一个线程,女朋友为一个线程. 3 .首先,创建资源类Card 其次,实现男操作类,女操作类,都要继承Runnable.因为要实现资源共享. 其次,男女类重写run方法,实现各自的操作.原创 2017-08-18 19:54:17 · 264 阅读 · 0 评论 -
生产者消费者模型
1 . 需求:如果生产不到6个面包,可继续生产,当面包个数大于0,可以进行消费.但是如果面包的数量为6个时,则停止生产.如果面包个数为0个时, 则停止消费. 2 . 在这里,需要一个面包类,有面包的属性和一些方法. 需要有消费者类, 需要有生产者类, 需要有超市类,作为共享资源类,(因为消费者和生产者不能直接打交道), 还需要有个测试类.3 . 面包类: package原创 2017-08-21 19:36:41 · 366 阅读 · 0 评论 -
线程死锁
1 . 死锁: 两个线程之间 , 必须有两个不同的锁 两个线程互相拿着对象的锁不释放, 还想要对象手里的锁 2 . 条件: 两个线程 两个不同的锁 每个线程都必须用着这两把锁 3 . 在写代码的过程中,尽量避免死锁package com.qf.demo2;import java.awt.Color;/*原创 2017-08-21 19:07:24 · 256 阅读 · 0 评论 -
线程同步(标志位看做成共享资源)
1 . 需求: *自己写一个标志位 * flag = true 打印了数字了还没打印字母, 此时 应该 让数字等着 打印 字母 * false 打印了字母了 还没打印数字,此时 应让 字母等着, 打印数字package com.qf.demo3;/** * 需求: * A12B34C56......Z5152 * * 两个线程 * 一个字母 * 一个数字原创 2017-08-21 17:57:10 · 674 阅读 · 0 评论 -
线程同步代码块之交换输出
1 .同步代码块没有写在资源类中,写在了操作类中的run方法中. 2 . 注意唤醒,注意操作共享资源,该加加,该减减 3 . * 需求: * 男朋友存钱 必须等着女朋友取完以后再存 * 女朋友取钱, 必须等着 男朋有 存完以后 再取package com.qf.demo3;public class Test { public static voi原创 2017-08-21 17:50:55 · 234 阅读 · 0 评论 -
线程同步方法之交换输出
1 . 两个线程交换输出 2 . 使用的是同步方法package com.qf.demo3;public class Test2 { public static void main(String[] args) { //创建资源类对象 Card2 card2 = new Card2(0); //创建两个操作类 Boy2 boy2原创 2017-08-21 17:46:19 · 327 阅读 · 0 评论 -
同步方法(非静态)
1 . 不要在run 方法上面添加synchronized 2 . 同步方法 锁是 this 还要要求 锁是 唯一的 , 同步方法要写在资源类里面 3 . 注意处理下面的run方法和saleTicket()方法的关系 4 .package com.qf.demo;public class Test3 { public static void main(String[] args) {原创 2017-08-21 09:09:03 · 199 阅读 · 0 评论 -
同步静态方法
1 . 锁 是资源类对象, 同步方法, 方法要写在资源类中 2 .资源类如果是单写的,没有实现Runnable接口.同步方法要写在资源类中,锁要求唯一,静态的同步方法,使用的锁是Card2.class 3 . 解释类.class:jvm 再去使用指定类 给每一个类创建一个 唯一的Class 对象,也就是说每个类有一个Class对象,因静态方法不能使用this关键字,则同步静态方法使用的锁是类原创 2017-08-21 09:18:45 · 376 阅读 · 0 评论 -
同步代码块2
1 . 锁一定是 资源类对象 2 . package com.qf.demo;/** * 锁一定是 资源类对象 * * @author Administrator * */public class Test2 { public static void main(String[] args) { Card card = new Card();原创 2017-08-21 08:58:22 · 250 阅读 · 0 评论 -
同步代码块
1 . * 使用同步代码块 * 1 确定要被同步的代码 * 2 用同步代码块 将要被同步的代码进行同步 * synchronized(object){ * 被同步的代码 * } 2 .锁的对象必须是唯一的 ,多个线程 公用一把锁,如果是多把锁, 就相当于没加锁,资源类只能创建一个对象, 可以利用资源类对象 this 3 .原创 2017-08-21 08:55:33 · 318 阅读 · 0 评论 -
懒汉式的线程安全
1 . 双重锁package com.qf.demo2;public class LazyInstance { private LazyInstance(){ } private static LazyInstance instance; // 加上一个同步代码块或者是同步方法 就是能实现 线程安全的单例 public static LazyInstance get原创 2017-08-21 08:42:38 · 435 阅读 · 0 评论 -
终止线程的集中方式
1 . 用标准输入来阻止当前线程package com.qf.demo3;import java.io.IOException;import java.io.InputStream;public class Test6 { public static void main(String[] args) { Thrid thrid = new Thrid(); t原创 2017-08-18 21:00:57 · 227 阅读 · 0 评论 -
线程调度的方法()
1 . sleep() 在睡眠的时候 会释放cpu 让给其他线程执行, 即使没有其他线程 抢占cpu 也需要等待睡眠时间到了以后才能真正的指定.package com.qf.demo3;public class Test2 { public static void main(String[] args) { MyThread2 thread2 = new MyThread2(原创 2017-08-18 20:27:22 · 7194 阅读 · 0 评论 -
setPriority()优先级
1 . 优先级表示重要程度或者紧急程度.但是能不能抢到资源也是不一定. 2 . 分配优先级:反映线程的重要或紧急程度 线程的优先级用1~10 表示,1的优先级最低,10的优先级最高,默认值是5package com.qf.demo3;/** * 优先级 : 只能反映 线程 的 中或者是 紧急程度 , 不能决定 是否一定先执行 * setPriority() * 1~10 1最低原创 2017-08-18 20:05:38 · 14953 阅读 · 0 评论 -
线程基础1
1 .给线程赋名字的两种方式: 通过调用父类的构造方法也可以给 线程赋值名字, 也可以this调用set方法 2 .自己写的类继承Thread的时候要注意,Thread 类中 setName 和 getName 是final修饰的只能被继承 ,不能被重写.继承类中name属性不用写. 3 . package com.qf.demo4;public class Test3原创 2017-08-17 21:11:30 · 236 阅读 · 0 评论 -
线程之资源类
1 . 资源类:放着资源的类叫资源类,资源是共享的 2 .需求 * 四个窗口 一共就卖100张票 * 四个窗口各自卖100张票子, 没有共享资源 extends Thread * 四个窗口 一共卖100张票 , 有共享资源 实现 Runnable 3 .步骤: * 1用类实现Runnable * 2 创建Runnable实现类对象 * 3原创 2017-08-17 21:26:12 · 409 阅读 · 0 评论 -
接口回调
1 . 回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法 2 . 接口回调,回调的是接口的方法.这个方法就是回调方法 3 . 首先定义一个接口package com.qf.demo6;public interface Phone { public void getResult(String result);}其次,创建二狗类,要提问问题原创 2017-08-22 21:46:58 · 485 阅读 · 0 评论