黑马程序员——多线程
来源:互联网 发布:转换别人的淘宝客链接 编辑:程序博客网 时间:2024/06/05 20:12
------- android培训、java培训、期待与您交流! ----------
概念
线程是程序执行一条路径,一个进程中可以包含多条线程
多线程并发执行可以提高程序的效率,可以同时完成多项工作
多线程并发执行可以提高程序的效率,可以同时完成多项工作
多线程并行和并发的区别
并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU)
并发是指两个任务都请求运行,而处理器只能接受一个任务,就把这两个任务安排轮流进行,由于 时间间隔较短,使人感觉两个任务都在进行
多线程中继承Thread类与实现Runnable接口的区别
a.查看源码的区别:
继承Thread:由于子类重写了Thread类的run()方法,当调用start()时,直接找子类的run()方法
实现Runnable:构造中传入了Runnable的引用,成员变量记住了它,start()调用run()方法时内部判断成员变量Runnable的引用是否为空,不为空编译时看的是Runnable的run(),运行时执行的是子类run()方法
继承Thread:由于子类重写了Thread类的run()方法,当调用start()时,直接找子类的run()方法
实现Runnable:构造中传入了Runnable的引用,成员变量记住了它,start()调用run()方法时内部判断成员变量Runnable的引用是否为空,不为空编译时看的是Runnable的run(),运行时执行的是子类run()方法
b.好处与弊端之间的区别:
1.Thread:
好处是:可以直接使用Thread类中的方法,代码简单
弊端是:如果已经有了父类,就不能用这种方法
2.Runnable:
好处是:即使自己定义的线程类有了父类也没关系,因为有了父类也可以实现接口,而且接口是可以多实现 的,
弊端是:不能直接使用Thread中的方法需要先获取到线程对象后,才能得到Thread的方法,代码复杂
同步
同步代码块
使用synchronized(Object o)方法实现线程之间的同步,锁机制
锁对象可以是任意的,但是不能为匿名对象,因为匿名对象不是同一对象
同步方法
在方法返回值类型前加入synchronized
非静态的同步方法的锁对象为this
静态的同步方法的锁对象为该类的字节码对象,类名.class
死锁
一般情况下不使用同步代码块嵌套,会出现死锁现象
使用synchronized(Object o)方法实现线程之间的同步,锁机制
锁对象可以是任意的,但是不能为匿名对象,因为匿名对象不是同一对象
同步方法
在方法返回值类型前加入synchronized
非静态的同步方法的锁对象为this
静态的同步方法的锁对象为该类的字节码对象,类名.class
死锁
一般情况下不使用同步代码块嵌套,会出现死锁现象
多线程通信
如果我们希望多个线程有规律的执行,就可以使用通信
通过使用wait()与notify()方法来实现
通过使用wait()与notify()方法来实现
class Demo {MyThread t = new MyThread();//创建继承Thread类对象MyRunnable r = new MyRunnable();//创建实现runnable接口的类对象t.start();//启动线程for(int i = 0; i < 2000; i++) {System.out.println("bbbbb");}new Thread(r, "线程1").start();//创建Thread的匿名类对象并启动线程new Thread(r, "线程2").start();}//继承Thread类实现多线程class MyThread extends Thread {public void run() {for(int i = 0; i < 2000; i++) {System.out.println("aaaaaaaaaa");}}}//实现Runnable接口实现多线程class MyRunnable implements Runnable {public void run() {for(int i = 0; i < 2000; i++) {System.out.println("aaaaaaaaaa");}}}
0 0
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 利用spark进行层次社团发现(louvain算法测试)
- 他山之石-sphinx全文检索之PHP使用教程
- 07 eclipse C/ C++编译含有多个main函数的项目
- 【翻译自mos文章】Clusterware间歇性的hang,命令报CRS-184并且Network Socket Files in /tmp/.oracle or /var/tmp/.oracle被删
- JVM-内存模型
- 黑马程序员——多线程
- Android 系统稳定性 - ANR(二)
- 任务调度quartz(一)quartz在spring中的集成
- html5 notification新特性
- iOS通讯录开发
- 浅谈with语句
- iOS开发——使用Charles进行https网络抓包详解
- XMPP即时通信资料:
- EMC辐射干扰与静电干扰之处理方法