• java 初学多线程


    什么是进程?

    例如:

    这些每个都是一个进程,每个进程都有好多功能,这些功能同时运行走的就是线程,多线程

    一个进程会有多个线程或者一个线程,是一对多的关系

    进程:一个程序进入内存就可以叫做进程

    线程:线程是进程的一个执行单元(功能),可以多个线程一起执行

    程序运行原理

    java是抢占式调度,就是cpu会随机分配时间运行哪个线程时间长一点,执行的多一些。cpu会高速的在每个线程之间来回切换,但是某个时刻只能执行一个线程,

    多线程并不能提高程序的运行速度,但是可以提高程序的运行效率,让cpu的使用率更高

    分时调度:cpu平均分配时间,每个线程的时间是一样的

    主线程

    就是我们常用的main()方法,当JVM启动后,必然有一个方法从mian方法开始,到结束。才能执行mian下面的别的方法,依次执行。

    Tread类

    构造方法

    常用方法

    写一个新的类,然后继承Thread类,声明这是一个新的线程,将要执行的程序写在新的类里面,方法名run,在mian方法里用start调用

     1 package com.oracle.Demo02;
     2 
     3 public class Demo1 extends Thread {
     4     //JVM去找OS开了2条路径
     5     //对于CPU来说就有了2条路径,这2条路径都会被CPU执行,CPU有自己选择的权利,所以就有了随机性,
     6     //也可以理解为2个线程在抢夺CPU的资源(时间)
     7     public void run(){
     8         for(int i=0;i<100;i++){
     9             System.out.println("这是新建的线程"+i);
    10         }
    11     }
    12 }
     1 package com.oracle.Demo02;
     2 
     3 public class test {
     4 
     5     public static void main(String[] args) {
     6         Demo1 de = new Demo1();
     7         //开启线程。start方法会在后台调用run方法
     8         de.start();
     9         for(int i=0;i<100;i++){
    10             System.out.println("这是主线程"+i);
    11         }

    练习:

    给我创建三个线程,一个方法是打印1000以内的水仙花数,
    一个方法是打印1000以内的所有偶数,一个方法是循环打印1000个数

     1 package com.oracle.Demo02;
     2 
     3 public class Demo02 extends Thread {
     4     public void run(){
     5         for(int i=1;i<=1000;i++){
     6             int a = i%10;
     7             int b = (i/10)%10;
     8             int c = i/100%10;
     9             if((a*a*a+b*b*b+c*c*c)==i){
    10                 System.out.println("水仙花数"+i);
    11 
    12             }
    13         }
    14     }
    15 }
     1 package com.oracle.Demo02;
     2 
     3 public class Demo03 extends Thread{
     4     public void run(){
     5         for(int i=1;i<=100;i++){
     6             if(i%2==0){
     7                 System.out.println("偶数"+i);
     8             }
     9         }
    10     }
    11 }
    package com.oracle.Demo02;
    
    public class test {
    
        public static void main(String[] args) {
            Demo02 de = new Demo02();
            de.start();   创建第一个线程
            Demo03 dee = new Demo03();
            dee.start();    创建第二个线程
            for(int i =0;i<=1000;i++){    主线程
                System.out.println(i);
            }
            
        }
    
    }

     sleep方法,休眠,时间到了自然醒来

     1 package com.oracle.Demo03;
     2 
     3 public class Demo03 extends Thread{
     4     public void run(){
     5         for(int i=0;i<10;i++){
     6             System.out.println(""+i);
     7             //因为Thread没有声明异常所以只能用try()catch()来解决异常
     8             try {
     9                 sleep(2000);     //休眠2秒
    10             } catch (InterruptedException e) {
    11                 // TODO 自动生成的 catch 块
    12                 e.printStackTrace();
    13             }
    14         }
    15     }
    16 }
     1 package com.oracle.Demo03;
     2 
     3 public class Test03 {
     4 
     5     public static void main(String[] args) throws InterruptedException {
     6         // TODO 自动生成的方法存根
     7         Demo03 de = new Demo03();
     8         //获取main方法的对象
     9         Thread th = Thread.currentThread();
    10         de.start();
    11         for(int i=0;i<10;i++){
    12             System.out.println("main"+i);
    13             th.sleep(2000);   //main方法休眠2秒
    14         }
    15     }
    16 
    17 }

    线程的状态

     

  • 相关阅读:
    读写INI配置文件
    log4net自动邮件
    C#往SQLServer中插入大数据
    C#反射
    正则表达式
    收发邮件
    读写文本
    Selenium—选择框的相关操作(单选框、多选框、复选框、下拉框)
    Selenium—iframe的操作
    Selenium—web元素的操作
  • 原文地址:https://www.cnblogs.com/wangrongchen/p/9223724.html
Copyright © 2020-2023  润新知