多线程:
进程:
我们所能运行起来的每一个程序,都称之为进程。
线程:
比如word文档中的拼写检查,就是一个线程。线程就是一个进程中的某一个功能点。
进程可以包含多个线程。每一个线程都是独立运行的。
进程对于线程一样,都是需要CPU分配时间才能够执行,CPU不会同时分配给每一个程序执行的时间,这个执行的时间是分别分配的,哪一个进程或者是线程获取到时间,哪一个进程或者是线程就执行,所以所进程或者线程都分来执行的,不是同时执行。
在java中如何实现多线程程序:
java中一共有2种实现方式:
- 1.继承Thread类。需要重写run方法,run方法是线程的执行方法,一个线程启动以后就去执行run方法中的代码。
注意:
线程编写完毕,想要启动线程,不能直接调用线程run方法,应该是调用线程的start()方法;
- 2.实现Runnable接口,重写run方法
注意:
自定的线程类实现了Runnable接口。本身是没有start方法的。如果此时我们想要创建线程类对象,可以通过Thread提供的构造方法,将Runnable接口的子类对象作为参数传递给Thread的构造方法。然后创建Thread类的对象。
两种实现线程的方式的却别:
-
1继承Thread类的方式,受到单继承的局限,然后不能共享资源
-
2实现Runnable接口的方式,不受单继承的局限,并且可以共享资源。
以后使用线程的时候,优先考虑实现Runnable接口的方式。
线程的状态:
线程一共有5种状态
新建
就绪
运行
阻塞
终止
常用的方法:
-
1.Thread.currentThread():获取当前正在执行的线程对象
-
2.getName():获取线程的名称
-
3.setName():设置线程的名称
-
4.getId():获取线程的ID
-
5.isAlive():判断当前的线程是否启动并且正在运行.
-
6.join():强制执行线程,对于被强制执行的线程来说,其他线程必须等待强制执行的线程执行完毕,才能够执行。
-
7.sleep(long mills):让线程休眠指定的毫秒数。
-
8.interrupt():将线程打断。
-
9.setDaemon(boolean b):设置线程是否是后台线程。
-
10.setPriority(int i):设置线程的优先级,优先级高的线程被优先执行的概率较大。
-
11.yield():将一个线程的操作暂时让给其他线程执行。
【java中,为了提高线程操作的安全性,可以使用同步进行解决。】
java中同步的方式2种
1.同步代码块
语法
synchronized (同步的对象) {
需要同步的代码。
}
同步对象是指:当前正在操作的对象。
2.同步方法:
是指使用synchronized修饰的方法,被称为同步方法
生产者与消费者问题
假设:生产者负责生产,生产的产品包括信息的标题以及信息的内容。
消费者负责消费,消费者负责打印信息的标题以及内容。
wait与sleep的区别:
wait与sleep都是线程的阻塞方法,都会让线程进入到阻塞状态。但是sleep方法可以设置阻塞的时间,阻塞的时间一到自动进入就绪状态,wait方法让线程进入到则色状态,必须notify唤醒才能进入就绪状态。