java多线程快速入门(十八)】的更多相关文章

设置线程优先级:join() package com.cppdy; class MyThreadA extends Thread{ MyThreadB b; public MyThreadA(MyThreadB b) { this.b=b; } @Override public void run() { try { b.join(); sleep(1000); } catch (Exception e) { } System.out.println("A子线程执行"); } } cla…
------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有多个线程  什么是线程? 线程就是独立的运行一条执行路径 一个独立的执行单元 , 一个执行流程 为什么要使用多线程? 多线程提高程序效率 , 使用多线程 , 每个线程互补影响 2.创建线程的方式有哪些 1.使用继承 Thread类方式 如下示例 结果 1.继承 Thread 类 class Crea…
Lock锁是JDK1.5之后推出的并发包里面的关键字(注意捕获异常,释放锁) Lock与synchronized的区别 Lock锁可以人为的释放锁(相当于汽车中的手动挡) synchronized当线程执行完毕或者抛出异常的话,锁自动释放(相当于汽车中的自动挡) Condition用法 Condition的功能类似于在传统的线程技术中的Object.wait()和Object.notify()的功能 package com.cppdy; import java.util.concurrent.l…
线程池的好处: 避免我们过多的去new线程,new是占资源的(GC主要堆内存) 提高效率 避免浪费资源 提高响应速度 作用:会把之前执行某个线程完毕的线程不会释放掉会留到线程池中给下一个调用的线程直接使用 前提:AB线程在同一个线程池里面:A线程执行完毕了,B线程进来了,就直接去替换原来A线程的run方法,执行B 使用newCachedThreadPool创建线程池 package com.cppdy; import java.util.concurrent.ExecutorService; i…
1.Java.util的线程安全工具类 Vector(线程安全) ArrayList(线程不安全) HashTable(线程安全) HashMap(线程不安全) 2.将线程不安全集合变为线程安全集合 package com.cppdy; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class ThreadDemo16 { public static void main(S…
使用violate关键字解决了变量的可见性问题(volatile让多线程刷新falg的值) package com.cppdy; class MyThread11 extends Thread { //volatile让多个线程刷新falg的值 public volatile boolean falg = true; @Override public void run() { System.out.println("子线程开始执行啦"); while (falg) { } System…
使用atomicInteger解决了原子性问题(AtomicInteger保证每次只能一个线程操作count) package com.cppdy; import java.util.concurrent.atomic.AtomicInteger; class MyThread10 extends Thread { //AtomicInteger每次只能一个线程操作count private static AtomicInteger count = new AtomicInteger(0); @…
如何停止线程 1.使用stop方法强行终止线程(这个方法不推荐使用,可能会出现业务操作未执行完,线程中断了) package com.cppdy; class MyThread15 extends Thread{ @Override public synchronized void run() { while(true) { try { wait(); } catch (Exception e) { } //如果这里有非常重要的代码块,是不是就出现问题了 System.out.println("…
ThreadLocal关键字实现每个线程有自己的变量 package com.cppdy; class Number { private int num; public static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() { @Override protected Integer initialValue() { return 0; } }; public Number(int num) { th…
在静态方法上面加synchonizd用的是字节码文件锁 package com.cppdy; class MyThread8 implements Runnable { private static Integer ticketCount = 100; public boolean falg = true; @Override public void run() { if (falg) { synchronized (MyThread8.class) { while (ticketCount >…