【java】-- 多线程快速入门】的更多相关文章

------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有多个线程  什么是线程? 线程就是独立的运行一条执行路径 一个独立的执行单元 , 一个执行流程 为什么要使用多线程? 多线程提高程序效率 , 使用多线程 , 每个线程互补影响 2.创建线程的方式有哪些 1.使用继承 Thread类方式 如下示例 结果 1.继承 Thread 类 class Crea…
多线程应用实例(批量发送短信) 1.创建实体类 package com.cppdy; public class UserEntity { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(Strin…
1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集合,一个线程是进程中的一条执行路径 3.多线程的好处 多线程的好处就是提高程序的效率 4.多线程的应用场景 迅雷下载视频.QQ同时和多人聊天.批量发送短信,批量上传资源 5.使用继承Thread类还是使用实现Runnable接口好? 使用实现Runnable接口好,原因是接口可以实现多个,类只能继承…
线程池的好处: 避免我们过多的去new线程,new是占资源的(GC主要堆内存) 提高效率 避免浪费资源 提高响应速度 作用:会把之前执行某个线程完毕的线程不会释放掉会留到线程池中给下一个调用的线程直接使用 前提:AB线程在同一个线程池里面:A线程执行完毕了,B线程进来了,就直接去替换原来A线程的run方法,执行B 使用newCachedThreadPool创建线程池 package com.cppdy; import java.util.concurrent.ExecutorService; i…
CountDownLatch(闭锁)计数器 有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能 package com.cppdy; import java.util.concurrent.CountDownLatch; class MyThread17 extends Thread{ private CountDownLatch countdownlatch; public MyThread17(CountDownLatch coun…
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…
Lock锁是JDK1.5之后推出的并发包里面的关键字(注意捕获异常,释放锁) Lock与synchronized的区别 Lock锁可以人为的释放锁(相当于汽车中的手动挡) synchronized当线程执行完毕或者抛出异常的话,锁自动释放(相当于汽车中的自动挡) Condition用法 Condition的功能类似于在传统的线程技术中的Object.wait()和Object.notify()的功能 package com.cppdy; import java.util.concurrent.l…
多线程通讯实例(必须要有多个线程.必须要管理同一个变量:线程A生产一个变量,线程B消费一个变量) package com.cppdy; class User { public String username; public String sex; //如果flag为false 证明变量可写不可读 //如果flag为true 证明变量可读不可写 public boolean flag=false; } class InputThread extends Thread { private User…
使用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); @…