Java多线程方法
2016-04-28 17:22
225 查看
Java并发
并发最吸引人的事一个原因是产生具有可响应的用户界面。用run方法包括的代码一般都是比较耗时的,所以一般用循环包括。
方法1 继承Thread
Run方法和是start方法
调用run()方法为什么是单线程的?而应该调用start()方法。
面试题:run方法和start方法的区别?
Run()方法只是封装线程执行的代码,直接调用相当于普通方法
Start方法首先启动了线程,然后用jvm去调用该线程的run()方法。
设置优先级 public final void setPriority() 默认优先级是5,最小是1最大是10
获取优先级public final int getPriority()
休眠:sleep(1000);睡1000毫秒
加入:public final void join() 等待线程终止其他线程才能开始例如t1.join(),则其他线程 必须等t1结束后才能开始。
礼让:thread.yeild()几个线程依次执行,但是只是在一定程度上依次执行
后台线程:public final void setDaemon(boolean on)将该线程设置为守护线程或用户线 程,当正在运行的线程都是守护线程时,Java虚拟机就会退出,该方法必须在
启动线程前调用
中断线程:public final void stop()让线程停止,t1.stop()具有不安全性
public void interrupt()让线程中断,线程休眠的时候被中断则走抛出的部 分然后继续执行下面的代码
线程的生命周期:
面试题线程的生命周期 ?
方式2 实现Runnable接口
步骤:1实现Runnable接口
2.重写run方法
3.创建对象
4.创建Thread对象并把之前的对象作为参数传递。
实现接口的方式要是拿该进程的名字就必须使用Thread.currentThread().getName()
问题:为什么有了方式一还要有方式二
答案:1可以避免由于Java单继承带来的局限性。
2适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代 码,数据有效分离,较好的体现了面向对象的设计思想。
解决线程安全问题?
首先想为什么出现问题?(也是我们判断是否有问题的标准)
•是否是多线程环境
•是否有共享数据
•是否有多条语句操作共享数据
如何解决多线程安全问题呢?
•基本思想:让程序没有安全问题的环境。
•怎么实现呢?
•把多个语句操作共享数据的代码给锁起来,让任意时刻只能有一个 线程执行即可。
在开头创建一个共享的对象Object obj = new Object()
用synchronized(obj){代码}
同步的特点:
同步的前提
•多个线程
•多个线程使用的是同一个锁对象
同步的好处
•同步的出现解决了多线程的安全问题。
同步的弊端
•当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗 费资源的,无形中会降低程序的运行效率。
同步方法
•就是把同步关键字加到方法上
同步方法的锁对象是什么呢?
如果是静态方法,同步方法的锁对象又是什么呢?
那么,我们到底使用谁?
•如果锁对象是this,就可以考虑使用同步方法。静态方法的锁对象 是(类名.class)对象,否则能使用同步代码块的尽量使用同步代码 块
相关文章推荐
- 阿里云服务器部署java web项目
- 《深入分析Java web技术内幕》笔记
- struts类型自动转换
- 创建子类对象会调用父类的初始化方法,而不只是构造函数
- 《JAVA并发编程实战---读书笔记1》
- java常量池概念
- java类型转换防止报异常
- 一个简单的Java开发WebService实例
- Java Servlet
- J2SE中spring应用
- Java设计模式系列之动态代理模式(转载)
- java/javaweb打war包
- Eclipse添加Spket插件实现ExtJs智能提示
- java中ftpClient.listFiles()结果为空问题解决方案
- Spring MVC文件上传
- java类集: collection, list , set, map
- struts自定义拦截器解读
- jeecg报错:java.lang.Exception: No runnable methods
- ElasticSearch学习16_Elasticsearch java api 基本使用之增、删、改、查
- 【转】JAVA的反射机制-实例详解