进程和线程

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 }

    

原文地址:https://www.cnblogs.com/bequt/p/5651430.html