1.进程其实就是一个程序,比如360卫士为一个进程,QQ为一个进程,单核CPU系统中,一个时间片中只能运行一个进程,我们感觉是可以运行多个进程是因为时间片很短
2.线程,线程在一个进程中负责代码的执行,就是进程中的一个路径
3.多线程: 一个进程中执行多个线程,即 360卫士 ,清理垃圾 和 查杀病毒 可以同时执行.
一个JAVA程序中至少有两个线程,一个主线程负责main方法代码的执行, 一个垃圾回收器线程,负责回收垃圾.
多线程好处:
1.解决了一个进程能同时执行多个任务的问题
2.提高了资源的利用率,而没有提高了效率
多线程缺点:
1.增加了CPU的负担
2.引发了线程的安全问题
3.出现了死锁的现象
让线程小睡一会 可以 Thread.sleep(100) 中间是毫秒为单位
1 /* 2 Thread 线程类 3 一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法 4 直接利用start方法启动一个线程 5 6 临时阻塞状态 7 wait() 需要其他线程唤醒其线程,才可以从新进入可运行状态 8 sleep() 线程超过了指定的睡眠时间,从新进入可运行状态,才到运行状态 9 10 方法: 11 Thread(Strig name) 设置线程名字 12 13 sleep(); 那个线程执行sleep()代码就是那个线程睡眠!它是一个静态的方法,所以不需要实现对象来实现睡眠 14 直接利用Thread.sleep(); 很重要的理解,是谁睡眠!! 15 16 currentThread() 返回当前线程的名字 17 18 getPriority() 线程优先级 主线程的优先级是5 线程的优先级默认为5 数字越大优先级越大 , 范围为1 - 10 19 setPriority() 设置优先级 20 21 22 23 24 25 */ 26 27 public Demo5(String name){ 28 super(name); 29 } 30 31 public static void main(String[] args) throws InterruptedException { 32 33 Demo5 demo5 = new Demo5("蛋蛋"); 34 //开启线程,会自动执行run方法中的代码,run方法是不能直接调用的,这样是没有开启一个线程的! 35 demo5.start(); 36 37 //主线程睡眠,在那个线程下面,就是谁在睡眠! 38 Thread.sleep(100); 39 /* 40 for (int i = 0; i < 100; i++) { 41 System.out.println("主线程" + i ); 42 } 43 */ 44 Thread t = Thread.currentThread(); 45 System.out.println(t.getName()); 46 } 47 48 /* 49 * 重写多线程方法 50 * (non-Javadoc) 51 * @see java.lang.Thread#run() 52 */ 53 @Override 54 public void run() { 55 for (int i = 0; i < 100; i++) { 56 System.out.println("线程名字 "+ this.getName()); 57 } 58 }
创建线程的方法
1.利用extends Thread 类,之后重写 run方法,之后利用 对象.start() 方法开启进程
2.如下 主要优点可以让这个类还可以集成其他类
1 public class Demo8 implements Runnable{ 2 3 4 /* 5 Thread 线程创建方式二 6 7 实现implemets 是为了能够让这个类可以继承其他类 8 1.首先是implements Runnable 9 2.实现Runnable类中的run方法会 10 3.创建Runnable实现类对象 demo8 d = new demo8(); 11 4.创建Thread类,并且把对象d和名字传进去 12 5.调用Thread对象的 start() 方法 13 14 */ 15 16 17 @Override 18 public void run() { 19 20 /* 21 for (int i = 0; i < 50; i++) { 22 System.out.println(Thread.currentThread().getName() + "方法"); 23 } 24 */ 25 26 //这两个不相同,第一个是Demo8对象,第二个是张三,this对象是谁调用它,那么就是谁的对象. 27 System.out.println(this); 28 System.out.println(Thread.currentThread().getName()); 29 } 30 31 public static void main(String[] args) { 32 33 Demo8 d = new Demo8(); 34 Thread thread = new Thread(d, "张三");//d为target对象 35 thread.start(); 36 37 /* 38 @Override 39 public void run() { 40 if (target != null) { 41 target.run(); 是target 对象调用run() 42 } 43 } 44 */ 45 46 /* 47 for (int i = 0; i < 50 ; i++) { 48 System.out.println(Thread.currentThread().getName() + "方法"); 49 } 50 */ 51 } 52 53 }