多线程详解

来源:互联网 发布:室内装修设计软件 编辑:程序博客网 时间:2024/05/18 09:59

要理解多线程的概念,先给大家说说进程、线程的概念:

进程:正在运行中的应用程序;

线程:包含在进程下的一个执行过程。

单线程:串行程序--特点:按照顺序执行

多线程:并行程序(cpu在多个线程间不断切换,使用户感觉这几个线程是同时进行)


Main方法本身运行的时候就开启了一条线程

如果想创建其他线程——两个办法:

1.继承Thread

2.实现Runnable接口

共同特点:必须重写run方法(线程运行入口)

 

启动线程的方式不是调用run方法,需要调用start方法

获取线程名字:getName()方法

获取main线程名字:Thread.currentThread().getName()(先获取当前线程对象)

设置线程名字:setName()方法

线程执行后想要出让资源(不一定抢不到):yield()

线程执行后放弃多长时间抢占权:sleep(毫秒数)(不一定睡眠时间到了就能立即执行)


Cpu调度不是按照方法来调度的

 

Runnable my=new MyThread();(实现接口)

Thread  t1=new Threadmy);

 

————synchronize(防止别人使用某些资源)加在代码块、方法(锁的对象默认用的是this)上

具备原子性——不可分割

并行转串行

一定相同对象才生效

 

Wait()线程等待,前提:使用wait必须在synchronize中,并且调用wait的对象必须是锁对象

Notify()唤醒在等待队列中的随机的一个线程

 

线程死锁——线程全部进入等待状态,等待别人唤醒

解决死锁的方式:

1.wait(传递等待时间)

2.notifyAll()唤醒等待队列中所有的线程

 

Waitsleep都是线程等待

Wait必须在synchronize中 是通过object调用

SleepThread的方法

Sleep释放cpu的抢占权 但不释放锁的占用权

Wait即释放了cpu抢占权 也释放了锁

Sleep是时间到了自动唤醒

Wait可以通过时间,也可以通过其他线程唤醒


原创粉丝点击