多线程
- 说起进程,就不得不说下程序,程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
- 而进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位
- 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位。
注意:很多个线程是模拟出来的,真正的多线程指的是有多个CPU,即多核,如服务器。如果是模拟出来的多线程,即在一个CPU的情况下,在同一个时间点,CPU只能执行一个代码,因为切换的很快,所有就有同时执行的错觉;
1.线程的创建
有三种创建方式:
1.继承Thread类
重写run方法,run方法里面就是该线程要执行的方法
调用该线程时要调用start方法,不能直接调用run方法
2.实现Runnable接口的方式进行实现
小细节:在MyRun类中不能直接调用getName方法,要使用Thread类的currentThread静态方法来得到当前的对象,再调用getName方法获得线程名;
3.实现Callable接口
最后使用git方法获得线程运行的结果
多线程中的常用成员方法
细节:如果没有给线程设置名字,他们是有默认的名字的
格式:Thread-X X是数字从0开始;
static Thread currentThread() 获取当前线程的对象;
细节:
当JVM虚拟机启动后,会自动的启动多条线程
其中有一条线程叫做main线程
他的作用就是去调用main方法,并执行里面的代码
在以前,我们写的所有的代码,其实都是运行在main线程里面的
static void sleep(long time) 让线程休息指定的时间,单位为毫秒
细节:
1.哪条线程执行到这个方法,那么哪条线程就会在这里停留对应的时间
2.方法的参数:就表示睡眠的时间,单位毫秒
1 秒 = 1000 毫秒
3.当时间到了之后,线程就会自动的醒来,继续执行下面的其他代码
final void setDaemon(boolean on) 设置为守护线程
细节:
当其他的非守护线程执行完毕后,守护线程会陆续结束
通俗易懂:
当女神线程结束了,那么备胎也没有存在的必要了;
重点:
在聊天室里面,当你在实现传输文件的时候,要将传输文件的线程设置为守护线程,因为当你在传输文件的时候将聊天室关闭了,那么文件传输也就没有继续进行下去的必要了;
同步代码块
把操作共享数据的代码锁起来
格式 :
synchronized (锁){
操作共享数据的代码;
}
特点1:锁是默认打开的,有一个线程进去了,锁自动关闭
同步方法
就是把synchronized关键字加到方法上面
格式:
修饰符 synchronized 返回值类型 方法名(方法参数){
..........;
}
Java中线程的其中状态:
网络编程
三要素:IP,端口号,协议
协议