java多线程
简单了解多线程:
1.创建多线程实现类
1.继承Thread类,实现run方法
class Thread_01 extends Thread{
@Override
public void run() {
super.run();
}
}
2.实现Runnable接口,重写run方法
class Threa_02 implements Runnable{
@Override
public void run() {
}
}
2.调用多线程类
1.调用Thread_01(继承了Thread类)
Tread_01 tread_01=new Tread_01();
tread_01.start();
2.调用Thread_02(实现了Runnable接口)
Thread_02 thread_02=new Thread_02();
Thread thread=new Thread(thread_02);
thread.start();
注意,实现Runnable的类必须借助Thread才能开启线程
3.Thread类的一些方法
1.start():启动线程并调用现成的run方法;
2.run():线程在调度过程中执行的操作;(就是你想让这个线程做一些什么,就写到这个方法里面)比如:打印1-10
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
3.currentThread():返回当前线程
4.getname():返回当前线程的名字,一般和currentThread配合着使用
System.out.println(Thread.currentThread().getName());
5.setname:设置当前现成的名字
6.yield();让当前线程放弃cpu权,经行线程让步,并进入到就绪状态,只让给优先级比自己高的或者相等的线程
7.join();假如由A,B两个线程,在A线程里面的run方法里面调用B线程的join方法,那末A线程会进入阻塞状态,即暂停,直到B线程执行完在执行A线程
8sleep():让当前线程休眠多长时间,然后进入就绪状态
9.isAlive():判断当前线程是否存活
10.stop():强制线程生命周期结束,即让线程死亡
11.getpriority():获取线程的优先级,默认是5
12setDaemon():将当前线程变成守护线程
4.线程的调度
1.同等优先级的线程使用的时间片轮转法
2.优先级不同的线程使用的抢占式调度算法,高优先级的线程抢占cpu
5.现成的分类
1.守护线程:守护线程是在后台执行的,是用来保护用户线程的,当用户线程全部执行完守护线程将会死亡;比如jc就是守护线程
2.用户线程:比如Thread_02,就是用户自己定义的线程
6.线程的状态
1.新建:当一个Thread类或者它的子类被创建的时候,新生的线程处于新建状态。
2.就绪:当调用线程的start方法后,便进入线程队列等待cpu时间片,此时的线程已经具备了运行的条件,但是还没有获取cpu执行权,所以该线程处于就绪状态。
3.运行:当就绪的线程获取了cpu执行权,进入了运行状态
4.阻塞:线程在运行期间因为某些原因让出cpu执行权被强制挂起,便进入阻塞状态
5.死亡:线程完成了它的所有工作,或者调用stop方法被防止死亡
7.线程的同步
1.同步代码块:
public void run() {
for (int i = 0; i < 3; i++) {
synchronized (object){
moneny+=1000;
System.out.println(Thread.currentThread().getName()+"存了1000,一共"+moneny+"元");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
2.同步方法:
public synchronized void run() {
for (int i = 0; i < 3; i++) {
moneny+=1000;
System.out.println(Thread.currentThread().getName()+"存了1000,一共"+moneny+"元");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}