java从入门到精通学习笔记(四)——多线程

一、线程
状态:新建、运行(可运行)、阻塞、等待、计时等待、终止
对于单处理器的系统,虽然说是多线程并发执行,但同一时间点上只有一个线程被执行。


二、实现线程的两种方式
1. 继承java.lang.Thread类 
(1) Thread类的构造函数:
public Thread(String threadName);  //参数为线程对象的名称
public Thread();
(2) Thread类的常用函数:
start();      //调用该函数后,说明创建的线程处于运行(可运行)状态,该函数中会调用run()方法
run();        //该函数中含有该线程的任务
wait();       //正在运行的线程进入等待状态。。。释放锁。。不带参数时会永久等待,直到等到notify()
notify();     //等待的线程被唤醒
notifyAll();  //所有处于等待的线程都被唤醒
sleep();      //线程进入休眠状态,此方法可能抛出InterruptedException异常。sleep执行结束后不一定进入运行状态,只是在就绪状态。。不释放锁
join();       //在线程A的run()方法中使用线程B的对象调用join()方法,会使线程A暂停,直到调用join方法的线程结束后,A线程才会继续
setPriority();//设置线程的优先级
(3) 实现方法:
可写一个类继承自Thread类,重写run函数,然后new一个该类的对象,即为创建了一个进程,然后调用start()即可。
2. 实现Runnable接口
(1) 实质上Thread类也是实现的Runnable接口。
Thread类的构造函数:
public Thread(Runnable r)
public Thread(Runnable r,String name)
(2) 实现方法
先编写一个实现该接口的类,然后实例化一个该类的对象,此时即建立了一个Runnable对象;
然后使用相应的构造函数用Runnable对象实例化一个Thread对象;然后调用start()方法即可。


三、线程同步
1. 将共享资源的操作放在synchronized定义的区域,这样当其他线程也获取到这个锁时,必须等待锁被释放时才能进入这个区域。
synchronized(Object){
}
2. 同步方法:在方法前加synchronized关键字
synchronized void f(){}
当某个对象调用了同步方法,该对象的其他同步方法必须等待该同步方法执行完毕才能被执行。





















































你可能感兴趣的:(java,java从入门到精通,java从入门到精通,java)