-
在线程中,停止线程的方法:设置旗标 使用volatile 定义boolean running=true,通过设置标志变量running,来结束线程。 如本文:volatile boolean keepRunning=true; 这样做的好处是:使得线程有机会使得一个完整的业务步骤被完整地执行,在执行完业务步骤后有充分的时间去做代码的清理工作,使得线程代码在实际中更安全查看全部
-
volatile是保证所有子线程里的变量都能同步到主内存里变量的值 不要用stop()方法结束线程查看全部
-
join方法可中断其它线程的执行,等待调用join方法的线程结束,即使是主线程main也会被中断 join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。查看全部
-
1.加入join是为了让舞台线程最后停止,如果不加有可能舞台线程结束,军队线程还未停止,就好比导演喊停,演员还在演!可以在join后面加入测试语句System.out.println("舞台结束!");,然后去掉或者保留join观察效果。 2.volatile 关键字 保证了线程可以正确地读取其他线程写入的值,如果不写成volatile,由于可见性的问题,当前线程有可能不能读到这个值//可见性JMM(JAVA内存模型)happens-before原则、可见性原则 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的值 3.Thread.yield();//让出处理器时间,公平竞争 一、ArmyRunnable.java volatile boolean keepRunning = true; //volatile保证了线程可以正确的读取其他线程写入的值 //可见性 ref JMM, happens-before原则 -------------------------------------------------------------------------------------------- //军队线程 //模拟作战双方的行为 public class ArmyRunnable implements Runnable { //volatile保证了线程可以正确的读取其他线程写入的值 //可见性 ref JMM, happens-before原则 volatile boolean keepRunning = true; @Override public void run() { while(keepRunning){ //发动5连击 for(int i=0;i<5;i++){ System.out.println(Thread.currentThread().getName()+"进攻对方["+i+"]"); //让出了处理器时间,下次该谁进攻还不一定呢! Thread.yield(); } } System.out.println(Thread.currentThread().getName()+"结束了战斗!"); } }查看全部
-
System.out.print();-------------格式化输出 ①.%d-----------输出整数 ②.%10.2f-------输出一个浮点数,小数点前有10位,小数点后为2位 ③.%n-----------换行查看全部
-
在Thread中有getName()获得线程名 线程引用.setName()方法 在Runable中没有该方法,可以用Thread.current.getName(); 两种方法实现线程: 1、继承 Thread 类 class MyThread extends Thread{}; Thread myThread = new MyThread(); myThread.start(); 2、实现Runnable类 class MyRunnable implements Runnable{} Thread myRunnable = new Thread(new MyRunnable); myRunnable.start(); 注:同一时间同一个核只能运行一个线程查看全部
-
java多线程学习要点回顾:查看全部
-
三个对象查看全部
-
舞台Stage查看全部
-
英雄KeyPersonThread查看全部
-
Java实现线程的两种主要方法: ①.继承Thread类 ②.实现Runnable接口 但是二者都必须重写public void run()方法查看全部
-
进程: 程序的执行过程;持有资源和线程。 线程:系统中最小的执行单元。 比如一个软件里边的各种任务就是线程。 线程的交互:互斥、同步查看全部
-
退出线程 ①.stop处于强制退出线程,线程不需全部运行完。--------不推荐使用 ②.推荐使用boolean变量做标记查看全部
-
的我非常查看全部
-
一个线程在阻塞状态下(例如sleep),此时interrupt的话,将会产生两个结果: 1、进程的interrupt状态被清除(cleard)而非被设置(set)。 2、sleep方法会抛出异常。查看全部
举报
0/150
提交
取消