您的位置:首页 > 编程语言 > Java开发

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)对象,否则能使用同步代码块的尽量使用同步代码 块
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: