进程
进程就是正在进行的程序,因为同一时间点计算机只能执行一个进程 ,计算机在不同的进程中快速的切换来达到多进程
多进程的意义:多进程的作用是提高CPU的使用率,而不是提高执行速度
线程
在一个进程中可以执行多个任务,而每一个任务可以看做一个线程
多线程的意义:多线程是为了提高应用程序的使用率,而不是提高执行速率
程序在运行过程中,都是在抢CPU的执行权,而且是随机的
并行和并发:
并行:某一时间段内同时运行多个程序
并发:某一时间点同时运行多个程序
启动JVM就是一个多线程的例子,会自动启动一个主线程,并用主线程调用main方法,所以多线程应该至少有一个主线程,一个垃圾回收线程
线程的两种开启方式
一,继承Thread类
package org.westos.demo2;
public class MyTest2 {
public static void main(String[] args) {
Thread thread = Thread.currentThread();
thread.setName("主线程");
System.out.println(thread.getName());
MyThread2 th1 = new MyThread2();
th1.setName("范冰冰");
MyThread2 th2 = new MyThread2();
th2.setName("李冰冰");
th1.start();
th2.start();
}
}
package org.westos.demo2;
public class MyThread2 extends Thread{
@Override
public void run() {//run方法中一般放比较费时的操作
super.run();
for(int i=0;i<100;i++){
//this.getName() 获取当前线程的名称
//Thread.currentThread() 获取当前正在执行的线程
Thread thread = Thread.currentThread();
System.out.println(thread.getName()+i);
}
}
}
二,实现Rannable方法
package org.westos.demo;
public class MyTest {
public static void main(String[] args) {
MyThread th = new MyThread();
th.start();//开启方式1
//th.start(); 注意不要重复的去开启线程
//开启方式2:new Thread(new MyThread2()).start();
}
}
package org.westos.demo;
public class MyThread2 implements Runnable {
@Override
public void run() {
System.out.println("线程要执行的代码");
}
}
getName()获取当前线程的名称
currentThread()获取当前正在执行的线程
setPriority()设置线程优先级,括号中写优先级别1-10,默认优先级都是5
getPriority()获取线程优先级
sleep()线程休眠,括号中写休眠时长,毫秒,一般会出现异常,需要处理
join()线程加入,一般要在线程开启之后再加入,线程加入表示等待该线程执行完毕后,其他线程才能再次执行
yield()礼让线程,暂停正在执行的线程对象,并执行其他线程,这个方法必须在开启线程前调用
setDaemon()