Java多线程

继承Thread,或者实现Runnable接口

(通常选择实现Runnable接口,可以多继承,可以方便的数据共享)

 

继承Thread:

覆写run()方法,然后thread.start();启动多线程

实现Runnable接口:

覆写run()方法,然后new Thread(r).start();启动多线程

(用Thread包装Runnable实例来进行启动)

 

Callable和FutureTask

因为Runnable的run()方法不能返回结果,所以多了一个Callable类,它的call()方法可以返回结果;

而FutureTask类可以包装Callable的子类,通过FutureTask的get()方法获取call()的返回的值

(Callable胜在有返回值,正常使用推荐Runnable类)

 

线程的五种状态

创建状态:创建一个线程对象时

就绪状态:start()让线程进入就绪状态

运行状态:线程分配到处理器资源,开始执行run()方法的时候

堵塞状态:因特殊状况,线程让出处理器资源并暂停执行的时候,sleep(),suspend(),wait()会让线程堵塞

终止状态:run()方法执行完毕,或者调用了stop()方法

 

取得当前线程的方法和设置线程名的方法

currentThread();取得当前运行的线程对象

构造方法Thread()第二个参数设置线程名

setName(),getName();这两个方法设置线程名,取得线程名

 

线程休眠

sleep()方法,单位是ms毫秒

 

线程优先级

最高10,中等5,最低1,也可以自己设置数值

setPriority(int);getPriority();

(主方法也是一个线程,它的优先级是5)

 

同步与异步

同步:等待程序执行完成返回结果进行下一步操作(例如2个卖票员不能同时卖第8张票,一个卖完第八张,另一个卖第九张)

异步:不等待程序执行完毕就去进行下一步操作(例如用浏览器一边下载软件,一边浏览网页)

java多线程同步的方法:

1.synchronized包装的代码块

public void run(){
    for(int i=0;i<50;i++){
        synchronized(this){
            doSomething;
        }
    }
}

2.synchronized定义的方法

public void run(){
    for(int i=0;i<50;i++){
        this.method();
    }
}
public synchronized void method(){
    doSomething;
}

 

死锁

程序A等待程序B的一个步骤完成,程序B等待程序A的一个步骤完成,程序陷入死锁状态

(对同一资源进行操作要用同步)

(过多的使用同步可能会造成死锁)

 

线程的等待和唤醒

Object类的wait()和notify(),notifyAll()

wait()使线程进入等待

notify()唤醒第一个进入等待的线程,notifyAll()唤醒所有等待的线程

 

三个过时的方法

suspend()线程挂起

resume()恢复挂起的线程

stop()停止线程

主要是因为这三个方法的使用会造成死锁,所有不被推荐使用

线程的停止可以覆写stop方法,利用flag标志位的方法来达到执行完run()方法来停止线程

 

java中的进程

每一个JVM运行就是一个进程,java命令执行一个类就启动了一个JVM(java虚拟机),主方法是其中一个线程,一个类执行完毕,该进程就自动消失

 

线程池

用于多线程并发

(未完代写)

(请先自行百度该块内容)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值