随笔分类 - 多线程
摘要:什么是线程池? 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而,增加可用线程数量是可能的。线程池中的每个线程都有被分配一个任务,一旦任务已经完成了,线程回到池子中并
阅读全文
摘要:ThreadLocal 提高一个线程的局部变量,访问某个线程时,拥有自己的局部变量 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 ThreadLocal接口很简单,只
阅读全文
摘要:Volatile 关键字的作用是变量在多个线程之间可见。 该程序,主线程中已经将传入参数改为了"false",可是程序并不会终止执行。 原因:线程之间是不可见的,线程读取的共享变量是主内存的副本(线程本地内存),没有及时读取到主内存的最新结果。 解决办法:使用Volatile 关键字解决线程之间的可
阅读全文
摘要:java内存模型:多线程相关 JVM内存结构:堆,栈,方法区... 二者不要搞混 java内存模型简称JMM,定义了一个线程对另一个线程可见。共享变量存放在主内存中,每个线程都有自己的本地内存,当多个线程同时访问一个共享数据时,可能本地内存没有及时刷新主内存数据到本地内存中,所以就会发生线程安全问题
阅读全文
摘要:1.原子性 一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行 2.可见性 当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看的到修改的值 3.有序性 程序执行的数序顺序按照代码的先后顺序执行,如使用线程中join()来实现
阅读全文
摘要:Java中有两种线程,一种是用户线程(前台线程),另一种是守护线程(后台线程) 当进程不存在或主线程停止,守护线程也会被停止。 使用setDeamon(true)设置子线程为守护线程。 setDeamon(true)在子线程启动前调用,否则报错。
阅读全文
摘要:1.使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 当flag为false时,停止线程。 2.使用stop()强行终止线程(这个方法不推荐用,因为stop()和suspend(),resume一样,可能发生不可预料的结果,没有错误处理机制) 3.使用interrupt()中断线程,
阅读全文
摘要:1. 什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。 2.多线程通讯方式 wait():当前线程等待,类似于sleep(),可以让当前线程,从运行状态变为阻塞(休眠)状态,wait()使用在多线程之间同步,和synchronzied一起使用。 注:wa
阅读全文
摘要:1.为什么会有线程安全问题? 当多个线程同时共享同一个成员变量(全局变量)或静态变量,做写操作时,可能会发生数据冲突问题,也就是线程安全问题。做读操作时不会发生数据冲突问题。 2.线程安全问题怎么解决? 使用synchronized(同步)关键字或者jdk1.5里面的并发包lock 2.1 sync
阅读全文
摘要:进程与线程的区别: 进程:一个应用程序中所有线程的集合 线程:进程中的一条执行路径,main 主线程,如果是自己创建的线程,叫做子线程 为什么要使用多线程: 提高程序的效率 多线程的应用场景: 主要体现到多线程提高程序的效率,举例:迅雷多线程下载,分批发送短信等
阅读全文
摘要:public class Demo3_Synchronized { public static void main(String[] args) { // TODO Auto-generated method stub Ticket2 ticket2 = new Ticket2(); new Thr
阅读全文
摘要:public class Demo2_Snschronized { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("多线程开始时间(毫秒):"+System
阅读全文
摘要:public class Demo3_Thread { public static void main(String[] args) { /* * 继承Thread类 */ new Thread() { //1.继承Thread public void run() { //2.重写run方法 for
阅读全文
摘要:实现Runnable的原理 1.看Thread类的构造函数,传递了Runnable接口的引用 2.通过 init()方法找到传递的target给成员变量的target赋值 3.查看run方法,发现run方法中有判断,如果target不为null就会调用Runnalbe接口子类对象的run方法 实现多
阅读全文
摘要:public class Demo2_Thread { public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub MyRunnable myRunna
阅读全文
摘要:public class Demo1_Thread { public static void main(String[] args) throws InterruptedException { Demo demo = new Demo(); //4.创建Thread类的子类对象 demo.start
阅读全文

浙公网安备 33010602011771号