
多线程
左绍骏
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
多线程程序实现的方式3
多线程程序实现的方式3提交的是Callable // 创建线程池对象 ExecutorService pool = Executors.newFixedThreadPool(2); // 可以执行Runnable对象或者Callable对象代表的线程 Future<Integer> f1 = pool.submit(new MyCallable(100)); ...原创 2020-02-08 16:56:35 · 198 阅读 · 0 评论 -
线程池的概述和使用
线程池的概述和使用A:线程池概述程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池。...原创 2020-02-08 16:37:37 · 184 阅读 · 0 评论 -
线程的五种状态
线程的五种状态原创 2020-02-08 15:21:47 · 173 阅读 · 0 评论 -
线程组的概述和使用
线程组的概述和使用A:线程组概述Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。默认情况下,所有的线程都属于主线程组。public final ThreadGroup getThreadGroup()//通过线程对象获取他所属于的组public final String getName()//通过线程组对象获取他...原创 2020-02-08 15:19:59 · 251 阅读 · 0 评论 -
JDK1.5的新特性互斥锁
JDK1.5的新特性互斥锁1.同步使用ReentrantLock类的lock()和unlock()方法进行同步2.通信使用ReentrantLock类的newCondition()方法可以获取Condition对象。需要等待的时候使用Condition的await()方法,唤醒的时候用signal()方法。不同的线程使用不同的Condition,这样就能区分唤醒的时候找那个线...原创 2020-02-08 12:42:22 · 171 阅读 · 0 评论 -
线程间的通信注意的问题
线程间的通信注意的问题1.在同步代码块中,用哪个对象锁就用哪个对象调用wait方法。2.为什么wait方法和notify方法定义在Object这类中?因为锁对象可以是任意对象,那么任意对象对应的类都是Object的子类,也就是Object是所有的类的基类,所以将方法定义在Object这个类中就会让任意对象对其进行调用。3.sleep方法和wait方法的区别?a.sleep方法在同步函数...原创 2020-02-07 22:22:23 · 317 阅读 · 0 评论 -
三个或三个以上间的线程通信
三个或三个以上间的线程通信多个线程通信的问题notify()方法是随机唤醒一个线程notifyAll()方法是唤醒所有线程JDK5之前无法唤醒指定的一个线程如果多个线程之间通信,需要使用notifyAll()通知所有线程,用while来反复判断条件package com.heima.thread2;public class Demo02_NotifyAll { pub...原创 2020-02-07 22:18:43 · 338 阅读 · 0 评论 -
两个线程间的通信
两个线程间的通信1.什么时候需要通信多个线程并发执行时,在默认情况下CPU是随机切换线程的。如果我们希望他们有规律的执行,就可以使用通信,例如每个线程执行一次打印。2.怎么通信如果希望线程等待,就调用wait()如果希望唤醒等待的线程,就调用notify()这两个方法必须在同步代码中执行,并且使用同步锁对象来调用package com.heima.thread2;...原创 2020-02-07 21:46:29 · 1992 阅读 · 0 评论 -
Timer
TimerTimer类:计时器。一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。TimerTask:由Timer安排为一次执行或重复执行的任务。package com.heima.thread;import java.util.Date;import java.util.Timer;import java.util.TimerTask;...原创 2020-02-07 16:10:14 · 381 阅读 · 0 评论 -
Runtime类
Runtime类Runtime类是一个单例类 Runtime r = Runtime.getRuntime(); //r.exec("shutdown -s -t 300"); //300秒后关机 r.exec("shutdown -a"); //取消关机package com.heima.thread;import java.io.IOException;...原创 2020-02-07 14:58:01 · 185 阅读 · 0 评论 -
单例设计模式
单例设计模式单例设计模式:保证类在内存中只有一个对象。如何保证类在内存中只有一个对象呢?(1)控制类的创建,不让其他类来创建本类的对象。private(2)在本类中定义一个本类的对象。Singleton s;(3)提供公共的访问方式。 public static Singleton getInstance(){return s}单例写法两种:(1)饿汉式 开发用...原创 2020-02-07 14:41:18 · 183 阅读 · 0 评论 -
以前的线程安全的类回顾
以前的线程安全的类回顾A:回顾以前说过的线程安全问题(线程是否安全查看是否使用synchronized关键字即可)看源码:Vector,StringBuffer,Hashtable,Collections.synchroinzed(xxx)Vector是线程安全的,ArrayList是线程不安全的。StringBuffer是线程安全的,StringBuilder是线程不安全的。Ha...原创 2020-02-06 21:36:59 · 149 阅读 · 0 评论 -
死锁
死锁多线程同步的时候,如果同步代码嵌套,使用相同锁,就有可能出现死锁。为了避免同步代码块出现死锁的情况,同步代码块不要嵌套使用。package com.heima.syn;public class Demo05_DeadLock { private static String s1 = "筷子左"; private static String s2 = "筷子右"; ...原创 2020-02-06 21:30:34 · 152 阅读 · 0 评论 -
火车站卖票的例子用实现Runnable接口
火车站卖票的例子用实现Runnable接口package com.heima.syn;public class Demo4_Ticket { /** * @param args * 火车站卖票的例子用实现Runnable接口 */ public static void main(String[] args) { MyTicket mt = new MyTicket();...原创 2020-02-06 20:49:38 · 326 阅读 · 0 评论 -
线程安全问题
线程安全问题多线程并发操作同一数据时,就有可能出现线程安全问题。使用同步技术可以解决这种问题,把操作数据的代码进行同步,不要多个线程一起操作。package com.heima.syn;public class Demo03_Ticket { /** * 需求:铁路售票,一共100张,通过四个窗口卖完. */ public static void main(String...原创 2020-02-06 16:25:37 · 145 阅读 · 0 评论 -
同步方法
同步方法使用synchronized关键字修饰一个方法,该方法中所有的代码都是同步的。非静态的同步方法的锁对象是神马?答:非静态的同步方法的锁对象是this静态的同步方法的锁对象是什么?为什么?答:是该类的字节码对象。静态是优先于对象而存在的,静态方法中是不能定义this和super的,只有当你创建对象的时候this才有值。 class Printer { public s...原创 2020-02-06 12:22:44 · 263 阅读 · 0 评论 -
同步代码块
同步代码块1.什么情况下需要同步当多线程并发,有多段代码同时执行时,我们希望某一段代码执行的过程中CPU不要切换到其他线程工作,这时就需要同步。如果两段代码是同步的,那么同一时间只能执行一段,在一段代码没执行结束之前,不会执行另外一段代码。2.同步代码块使用synchronized关键字加上一个锁对象来定义一段代码,这就叫同步代码块。多个同步代码块如果使用相同的锁对象,那么他...原创 2020-02-06 10:49:40 · 2773 阅读 · 0 评论 -
设置线程的优先级
设置线程的优先级setPriority()设置线程的优先级。package com.heima.threadmethod;public class Demo07_Priority { public static void main(String[] args) { Thread t1 = new Thread(){ public void run() { for(...原创 2020-02-05 23:29:21 · 273 阅读 · 0 评论 -
礼让线程
礼让线程yield让出cpu,让别的线程去执行。(支持特别不好,很多时候看不出效果,只作为了解。)package com.heima.threadmethod;public class Demo06_Yield { public static void main(String[] args) { new MyThread().start(); new MyThread()....原创 2020-02-05 23:22:47 · 145 阅读 · 0 评论 -
加入线程
加入线程join():当前线程暂停,等待指定的线程执行结束后,当前线程再继续。join(int):可以等待指定的毫秒之后继续。 final Thread t1 = new Thread() { public void run() { for(int i = 0; i < 50; i++) { System.out.println(getName() +...原创 2020-02-05 21:44:29 · 207 阅读 · 0 评论 -
守护线程
守护线程setDaemon():设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程都执行结束后,自动退出。 Thread t1 = new Thread() { public void run() { for(int i = 0; i < 50; i++) { System.out.println(getName() + "...aaaaaaaaa...原创 2020-02-05 21:00:46 · 200 阅读 · 0 评论 -
休眠线程
休眠线程Thread.sleep(毫秒,纳秒), 控制当前线程休眠若干毫秒1秒= 1000毫秒 1秒 = 1000 * 1000 * 1000纳秒 1000000000package com.heima.threadmethod;public class Demo03_Sleep { /** * @param args * @throws InterruptedExcept...原创 2020-02-05 18:12:52 · 165 阅读 · 0 评论 -
获取当前线程的对象
获取当前线程的对象Thread.currentThread():主线程也可以获取package com.heima.threadmethod;public class Demo02_CurrentThread { public static void main(String[] args) { new Thread() { public void run() { ...原创 2020-02-05 17:59:53 · 508 阅读 · 0 评论 -
获取名字和设置名字
获取名字和设置名字1.获取名字通过getName()方法获取线程对象的名字2.设置名字通过构造函数可以传入String类型的名字 new Thread("xxx") { public void run() { for(int i = 0; i < 1000; i++) { System.out.println(this.getName() + ...原创 2020-02-05 16:33:09 · 419 阅读 · 0 评论 -
匿名内部类实现线程的两种方式
匿名内部类实现线程的两种方式继承Thread类 new Thread() { //1,new 类(){}继承这个类 public void run() { //2,重写run方法 for(int i = 0; i < 3000; i++) { //3,将要执行的代码,写在run方法中 System.out.println("aaaaa...原创 2020-02-05 16:10:05 · 200 阅读 · 0 评论 -
继承Thread和实现Runnable的两种方式的区别
继承Thread和实现Runnable的两种方式的区别查看源码的区别:a.继承Thread:由于子类重写了Thread类的run(),当调用start()时,直接找子类的run()方法。b.实现Runnable:构造函数中传入了Runnable的引用,成员变量记住了它,start()调用run()方法时内部判断成员变量Runnable的引用是否为空,不为空编译时看的是Runnable的r...原创 2020-02-05 11:46:23 · 1123 阅读 · 0 评论 -
实现Runnable的原理
实现Runnable的原理查看源码1.看Thread类的构造函数,传递了Runnable接口的引用 。2.通过init()方法找到传递的target给成员变量的target赋值。3.查看run方法,发现run方法中有判断,如果target不为null就会调用Runnable接口子类对象的run方法。(父类对象指向子类,编译看左边,运行看右边。)...原创 2020-02-05 11:34:43 · 722 阅读 · 0 评论 -
多线程程序实现的方式2
多线程程序实现的方式22:实现Runnable定义类实现Runnable接口。实现run方法。把新线程要做的事写在run方法中。创建自定义的Runnable的子类对象。创建Thread对象,传入Runnable。调用start()开启新线程,内部会自动调用Runnable的run()方法。package com.heima.thread;public class De...原创 2020-02-04 23:02:32 · 116 阅读 · 0 评论 -
多线程程序实现的方式1
多线程程序实现的方式11:继承Thread定义类继承Thread重写run方法把新线程要做的事写在run方法中创建线程对象开启新线程, 内部会自动执行run方法package com.heima.thread;public class Demo02_Thread { public static void main(String[] args) { MyThrea...原创 2020-02-04 21:57:24 · 105 阅读 · 0 评论 -
Java程序运行原理和JVM的启动是多线程的吗
Java程序运行原理和JVM的启动是多线程的吗A:Java程序运行原理Java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个 “主线程” ,然后主线程去调用某个类的 main 方法。B:JVM的启动是多线程的吗JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的。package com.heima.thread...原创 2020-02-04 20:43:09 · 562 阅读 · 0 评论 -
多线程并行和并发的区别
多线程并行和并发的区别并行:就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU)并发:是指两个任务都请求运行,而处理器只能按受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。比如我跟两个网友聊天,左手操作一个电脑跟甲聊,同时右手用另一台电脑跟乙聊天,这就叫并行。如果用一台电脑我先给甲发个消息,然后立刻再给乙发消息,然后再跟...原创 2020-02-04 17:30:44 · 931 阅读 · 0 评论 -
多线程的引入
多线程的引入1.什么是线程线程是程序执行的一条路径,一个进程中可以包含多条线程。多线程并发执行可以提高程序的效率,可以同时完成多项工作。2.多线程的应用场景红蜘蛛同时共享屏幕给多个电脑。迅雷开启多条线程一起下载。QQ同时和多个人一起视频。服务器同时处理多个客户端请求。3.多线程的原理表面上看是多个线程,底层还是在某段时间只执行一个线程,只不过CPU切换时间的特别...原创 2020-02-04 16:29:23 · 230 阅读 · 0 评论