zoukankan      html  css  js  c++  java
  • 进程和线程

    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 }

        

  • 相关阅读:
    FastDFS+Nginx部署详细教程
    简单的区别记录
    linux搜索命令之find和grep
    [转载]redis持久化的两种操作RDB和AOF
    多线程的一点点整理
    利用spring-mail模块发送带附件邮件dome
    java集合类总结
    微信支付 遇到的问题
    dubbo监控工具
    Maven配置dubbo环境简单例子
  • 原文地址:https://www.cnblogs.com/bequt/p/5651430.html
Copyright © 2011-2022 走看看