zoukankan      html  css  js  c++  java
  • Java高级部分--线程(4)

    一.线程

    线程:线程是一个程序内部的顺序控制流

    多线程:一个进程中的多个同时执行的任务是多线程(交替执行)

    进程:电脑中的多个执行的任务

                                                               线程的工作流程生命周期

    线程原理:

        1.创建线程

        2.调用start方法激活线程

        3.就绪状态(没运行)

        4.cpu调度到该线程后进入运行状态

        5.也可以调用sleep方法,进入暂时阻塞状态  ,时间过后,再次进入就绪状态sleep(参数是毫秒)

        6.代码执行结束自动停止,自动死掉,不用close

    创建线程:

                 1.自定义类,继承Thread

                 2.自定义类,实现Runnable接口

    创建一个类继承Thread类,重写run方法,thread类中是已有start方法的

    ThreadA a = new ThreadA(); 
    a.start();

    Runnable接口自动带有run方法,但是没有start方法,所以要实例化thread对象,再调用start方法,调用start方法就会执行run里头的动作了

    ThreadB b = new ThreadB();
    Thread thread = new Thread(b);
    thread.start();

    优先级低,最后执行 setPriority(1);

    •需求:ThreadA类中、ThreadB类中、程序入口主方法中,ThreadA休眠时间一秒,ThreadB休眠时间为半秒,交替分别循环1000次

     1 ThreadA类
     2 
     3 package thread1;
     4 
     5 public class ThreadA extends Thread {   //线程类
     6     
     7     
     8     @Override
     9     public void run() {
    10         
    11          for(int i=0;i<1000;i++){
    12              
    13              if(i%2==1){            //A线程执行到奇数时,休眠1秒
    14                  
    15                 try {
    16                     Thread.sleep(1000);   //线程休眠
    17                 } catch (InterruptedException e) {   
    18                     // TODO Auto-generated catch block
    19                     e.printStackTrace();
    20                 }
    21              }
    22              
    23              System.out.println("---------线程A的执行动作"+i);   
    24          }
    25         
    26     }
    27 
    28 }
     1 ThreadB类
     2 
     3 package thread1;
     4 
     5 public class ThreadB implements Runnable {
     6 
     7     @Override
     8     public void run() {    //在调用start方法时执行的动作代码
     9         
    10          for(int i=0;i<1000;i++){
    11              
    12              if(i%3==0){
    13                  
    14                  try {
    15                     Thread.sleep(500);
    16                 } catch (InterruptedException e) {   
    17                     // TODO Auto-generated catch block
    18                     e.printStackTrace();
    19                 }
    20              }
    21              System.out.println("线程B的执行动作"+i);   
    22          }
    23 
    24     }
    25 
    26 }
     1 主方法
     2 
     3 package thread1;
     4 
     5 public class Main {
     6 
     7     /**
     8      * @param args
     9      */
    10     public static void main(String[] args) {
    11     
    12 
    13         for (int i = 0; i < 1000; i++) {
    14             System.out.println("***主方法执行的动作***" + i);
    15         }
    16 
    17         ThreadA a = new ThreadA(); // 线程是死的
    18         a.start();
    19 
    20         ThreadB b = new ThreadB();
    21         Thread thread = new Thread(b);
    22         thread.start();
    23     }
    24 
    25 }

    执行结果

    •需求:计时功能

     1 ShowDate类
     2 
     3 package thread1;
     4 
     5 import java.text.SimpleDateFormat;
     6 import java.util.Date;
     7 
     8 public class ShowDate extends Thread {    //计时
     9     
    10     @Override
    11     public void run() {
    12          //         int  x=0;
    13         
    14            while(true){
    15                
    16                Date   date=new Date();
    17                SimpleDateFormat  sdf=new SimpleDateFormat("yyyy/MM/dd   hh:mm:ss");
    18                System.out.println(sdf.format(date));
    19     //           x++;
    20                
    21        //           if(x>10){
    22        //                break;
    23       //               }
    24                try {
    25                 Thread.sleep(1000);
    26                 
    27             } catch (InterruptedException e) {
    28                 // TODO Auto-generated catch block
    29                 e.printStackTrace();
    30             }
    31    
    32            }
    33 
    34     }
    35 
    36 }
     1 主方法
     2 
     3 package thread1;
     4 
     5 public class Main {
     6 
     7     /**
     8      * @param args
     9      */
    10     public static void main(String[] args) {
    11         
    12           ShowDate   sDate=new ShowDate();
    13            sDate.start();
    14 
    15     }
    16 
    17 }

    执行结果

  • 相关阅读:
    js window对象
    bootstrap之输入框组
    安卓开发学习笔记(一):如何用Android Stuidio导出apk文件?
    达观杯文本智能处理挑战赛 练手代码实现
    kali linux学习笔记(四) : 网络端口大全介绍
    kali linux 网络渗透测试学习笔记(三)社会工程学之Java攻击:钓鱼网站制作
    Java提高篇(三):内部类和匿名内部类
    Java提高篇(二):IO字节流、字符流和处理流
    Java提高篇(一):区分引用变量与对象
    kali linux 网络渗透测试学习笔记(二)OWASP ZAP工具扫描SQL injection漏洞失败
  • 原文地址:https://www.cnblogs.com/Pioneer-HengYu/p/6639603.html
Copyright © 2011-2022 走看看