![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
you些话
记录学JAVA的路程,发表的文章为我的线上笔记,以便于复习
展开
-
现有一个程序,需要每隔一毫秒在界面打印一个“Hello”,与此同时,程序也在计算1+2+3+4+5+..+10000,算完之后输出。要求:在将加法结果输出之后Hello就不在打印
package com.lzy.thread;public class PeriodicWork2 extends Thread { int sum=0; @Override public void run() { for(int i=0;i<=10000;i++) { sum+=i; //运算1+2+3+....+...+10000的值 if(i%1000==0) {//当i为1000倍数时模拟延迟 try { Thread.sleep(1000);原创 2020-10-31 12:55:33 · 678 阅读 · 0 评论 -
定义一个数组,大小为10;两个线程,都向这个数组中存放数据,当数组满时要求能够提示
package com.lzy.thread;public class PeriodicWork03 { public static void main(String[] args) { Array a=new Array(); new Thread(a,"线程一:").start(); new Thread(a,"线程二").start(); } }class Array implements Runnable{int[] a=new int[10];int i=0;boo原创 2020-10-28 17:32:16 · 566 阅读 · 0 评论 -
多线程 --volatile
volatile用于保证数据的同步,也就是可见性package com.lzy.others;public class TestVolatile {private /*volatile*/ static int num=0; public static void main(String[] args) { new Thread(()->{ while(num==0) {//死循环 为了让CPU"忙"的没时间看num是否有改变,此处也不要写代码 } }) .st原创 2020-10-26 20:47:27 · 59 阅读 · 0 评论 -
多线程--HappenBefore
执行代码的顺序可能与编写代码不一致,即虚拟机优化代码顺序,则指令重排package com.lzy.others;/** * 指令重排:代码执行顺序与预期不一致 * 目的:提高性能 * @author Administration * */public class TestHappenBefore { private static int a=0; private static boolean flag=false; public static void main(String[]原创 2020-10-26 20:20:07 · 78 阅读 · 0 评论 -
多线程--定时器
package com.lzy.others;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Timer;import java.util.TimerTask;public class TimerTest01 { public static void main(String[] args) { Timer time=new Timer原创 2020-10-25 13:54:24 · 142 阅读 · 0 评论 -
多线程 生产者消费者模式-管程法-信号灯法
管程法package com.lzy.cooperation;/** * 协作模型:生产者消费者实现方式一:管程法 * 借助缓冲区 * @author Administration * */public class CoTest01 {public static void main(String[] args) { SynContainer container=new SynContainer(); new Productor(container).start(); new Cons原创 2020-10-25 13:24:09 · 102 阅读 · 0 评论 -
多线程——并发——死锁产生于解决
死锁:过多的同步可能造成相互不释放资源* 从而相互等待,一般发生于同步中持有多个对象的锁package com.lzy.syn;/** * 死锁:过多的同步可能造成相互不释放资源 * 从而相互等待,一般发生于同步中持有多个对象的锁 * @author Administration * */public class eDeadLock02 {public static void main(String[] args) { Burn b1=new Burn(1,"小明"); Burn b2原创 2020-10-23 13:33:50 · 88 阅读 · 0 评论 -
加深synchronized的理解,模拟火车选位置的方法
初级package com.lzy.syn;public class dBookTrain { public static void main(String[] args) { Train t=new Train("k1046",20); //火车班次,以及火车总票数 new Thread(new Passenger(t,5),"小明").start(); //小明选了5张票班次k1046 new Thread(new Passenger(t,15),"小刚").start();//小红原创 2020-10-20 17:50:28 · 135 阅读 · 0 评论 -
多线程__并发同步synchronized
在这里现有三个线程不安全的实例代码一、线程不安全的体现1.模拟抢票package com.lzy.syn;/** * 线程不安全,有负数,重复 * @author Administration * */public class aUnsafeTest01 implements Runnable { private int ticketNums=10; //票数 private boolean flag=true; @Override public void run() {原创 2020-10-18 16:54:44 · 134 阅读 · 1 评论 -
多线程——其他方法isAlive,Thread.currentThread(),setName,getName
其他方法isAlive:线程是否还活着Thread.currentThread():取得当前正在运行的线程对象,也就是获取自己本身setName 给线程起一个名字,getName 获取线程的名字,在这里setName()getName()d都是代理名字 也就是下面代码中的程序员真实名字为“lzy”package thread.lzy.www;/** * 其他方法 * isAlive:线程是否还活着 * Thread.currentThread():取得当前正在运行的线程对象,也就是原创 2020-10-14 13:13:45 · 577 阅读 · 0 评论 -
多线程—守护线程Daemon
package thread.lzy.www;/** * 守护线程:是为用户线程服务的;JVM停止不用等待守护线程执行完毕 * 默认:用户线程jvm等待用户线程执行完才会停止 * @author Administration * */public class DaemonTest { public static void main(String[] args) { God god=new God(); You you=new You(); Thread t=new Thread原创 2020-10-14 12:49:58 · 86 阅读 · 0 评论 -
多线程优先级——Priority
线程的优先级1-101.NORM_PRIORITY 5 默认2.MIN_PRIORITY 13.MAX_PRIORITY 10概率,不代表绝对的先后顺序,也就是说优先级为10的并不一定就比优先级为1的先运行,只是它先运行的概率比优先级为1的大,优先级为1-10,不能超过这个范围。一般默认优先级为5.package thread.lzy.www;/** * 线程的优先级1-10 * 1.NORM_PRIORITY 5 默认 * 2.MIN_PRIORITY 1 * 3.MAX_PRI原创 2020-10-14 12:29:28 · 760 阅读 · 0 评论 -
多线程插队——join
join合并线程,待此线程执行完成后,在执行其他线程,其他线程阻塞package thread.lzy.www;public class dBlockedjoind01 { public static void main(String[] args) throws InterruptedException { Thread t = new Thread(()->{ for(int i=0;i<10;i++) { System.out.println("lambda...原创 2020-10-14 10:27:05 · 119 阅读 · 0 评论 -
多线程——礼让yield
yield 礼让线程,暂停线程 直接进入就绪状态不是阻塞状态package thread.lzy.www;/** * yield 礼让线程,暂停线程 直接进入就绪状态不是阻塞状态 * @author Administration * */public class cYieldDemo01 { public static void main(String[] args) { MyYield my=new MyYield(); new Thread(my,"a").start()原创 2020-10-13 17:18:15 · 133 阅读 · 1 评论 -
多线程_暂停sleep
1.sleep模拟网络延迟,放大了发生问题的可能性点击这里模拟12306抢票延迟2.倒计时package thread.lzy.www;import java.text.SimpleDateFormat;import java.util.Date;public class bBlockedSleep {public static void main(String[] args) throws InterruptedException { //倒计时 Date endTime=new D原创 2020-10-13 16:40:12 · 74 阅读 · 0 评论 -
多线程-终止
package thread.lzy.www;/** * 终止线程 * 1.线程正常执行完毕 自动终止 * 2.外部干涉-->加入标识 * 注:不要使用stop destroy方法,线程不安全 * @author Administration * */public class aTerminateThread implements Runnable {//加入标识,标记线程体是否可以运行 private boolean flag=true; private String原创 2020-10-13 15:31:26 · 48 阅读 · 0 评论 -
初识Lambda 推导
一、package com.lzy.thread;/** * Lambda表达式 简化线程(用一次)的使用 * @author LZY * */public class hTestLambda { //静态内部类 static class Test implements Runnable{ @Override public void run() { for(int i=0;i<20;i++) { System.out.println("一边听歌");原创 2020-10-11 12:46:22 · 105 阅读 · 0 评论 -
匿名内部类的使用
匿名内部类适合那种只需要使用一次的类注意:1.匿名内部类没有访问修饰符2.匿名内部类没有构造方法。因为它连名字都没有那又何来构造方法呢。package cn.txt.Integer;/** * 测试匿名内部类 * 适合那种只需要使用一次的类 * @author Administration * */public class TestAnonymousInnerClass { public static void test01(AA a) { a.aa(); } pub原创 2020-10-09 10:38:37 · 297 阅读 · 0 评论 -
多线程静态代理
package com.lzy.thread;/** * 静态代理 * 实现公共接口 * 1.真实角色 * 2.代理角色 * @author lzy * */public class gStaticProxy { public static void main(String[]args) { new WeddingCompany(new You()).happyMarry(); }}interface Marry{ void happyMarry();}//真实角色原创 2020-10-08 15:48:37 · 66 阅读 · 0 评论 -
多线程初级模拟12306抢票
package com.lzy.thread;/** * 共享资源,并发(线程安全) * @author Administration * */public class eWeb12306 implements Runnable{ //票数private int ticketNums=99; @Override public void run() { while(true) { if(ticketNums<0) { break; } try {原创 2020-10-08 14:58:35 · 594 阅读 · 3 评论 -
多线程 实现Runnable
package com.lzy.thread;/** * 创建线程方式二: * 1、创建:实现Runnable+重写run * 2、启动:创建实现类对象+Thread对象+start * @author 栗志勇 * 推荐使用该方法:避免单继承的局限性(因为java只能单继承,防止该类需要继承其他) * */public class aStartRun implements Runnable{ /** * 线程入口点 * */ @Override public void原创 2020-10-08 13:48:42 · 82 阅读 · 0 评论 -
多线程-继承Thread
package com.lzy.thread;/** * 创建线程方式一: * 1、创建:继承Thread+重写run * 2、启动:创建子类对象+start * @author Administration * */public class aStartThread extends Thread{ /** * 线程入口点 * */ @Override public void run() { for(int i=0;i<20;i++) { System.o原创 2020-10-07 14:36:46 · 108 阅读 · 0 评论