华恩JAVA班第30天
---------------------------多线程---------------------------
主要内容:
线程的基本概念
线程的创建和启动
线程的调度和优先级
线程的状态控制
线程同步
-----------------------------------
线程是一个程序内部的顺序控制流:
线程是程序内部不同的执行路径..
线程和进程的区别:
Java的线程是通过java.lang.Thread类来实现的。
VM启动时会有一个主方法(public static void main(){})所定义的线程。
可以通过创建Thread的实例来创建新的线程
每个线程多是通过某个特定的Thread对象所对应的方法run()来完成其操作的,
方法run()称为线程体
通过调用Thread类的start()方法来启动一个线程。
------------------------------------
线程的创建和启动:
两种方法创建线程:
1.定义线程类实现Runnable接口
Thread myThread=newThread(target)
Runnable中只有一个方法:
使用Runnable接口可以为多个线程提供共享的数据
在实现Runnable接口的类的run方法定义中可以使用Thread的静态方法
2.可以定义一个Thread的子类并重写其run方法,如:
}
能使用接口就不要从Thread继承
创建---start()--->就绪状态<----调度---->运行状态--------->终止
------------------------------------
线程控制基本方法:
------------------------------------
sleep/join/yield方法
Sleep方法:
Join方法:
yield方法
-----------------------------------
线程的优先级别:
线程调度器按照线程的优先级决定应调度那个线程来执行。
======================================================================
--------------------------线程的同步:重点----------------------------
项目JavaStudy-->(源包)src.(包)study.Thread.(类)TestSync.java
用该关键字锁定一个函数,相当于锁定该函数内部所有的语句。
-----------------------------------
在java中,引入了对象互斥锁的概念,保证共享数据操作的完整性,每个对象都
应该对应于一个可称为“互斥锁”的标记,这个标记保证在任意时刻,只能有一个
线程访问该对象。
关键词synchronized来与对象的互斥锁联系,党某个对象被synchronized修饰时,
表示该对象在任意时刻都只能由一个线程访问。
synchronized的使用方法:
synchronized(this){
}
synchronized还可以放在方法声明中,表示整个方法为同步方法:
-------------------------------------
死锁的发生:
死锁模拟示例:JavaStudy-->src.study.Thread.TestDeadLock.java
著名死锁案例:哲学家吃饭问题:每个人都有一支筷子。
解决办法:
----------------------------------------------------------------------------
wait、sleep区别
----------------------------------------------------------------------------
wait、sleep区别
----------------------------------------------------------------------------
总结:
线程/进程的概念
创建和启动线程的方法
sleep
join
yield
synchronized
wait
notify/notifyAll
多线程实例
public class ThreadDemo1 {
}
class MyThread1 extends Thread{
}