zoukankan      html  css  js  c++  java
  • 线程同步总结

     *    进程:
     *        正在运行的程序,是系统进行资源分配和调用的独立单位。
     *        每一个进程都有它自己的内存空间和系统资源。
     *    线程:
     *        是进程中的单个顺序控制流,是一条执行路径
     *        一个进程如果只有一条执行路径,则称为单线程程序。
     *        一个进程如果有多条执行路径,则称为多线程程序。

    2种方式启动多线程

     * 方式1:继承Thread类。
     * 步骤
     *         A:自定义类MyThread继承Thread类。
     *         B:MyThread类里面重写run()?
     *             为什么是run()方法呢?
     *         C:创建对象
     *         D:启动线程

             MyThread my = new MyThread();
             // 启动线程
    //         my.run();
    //         my.run();
            // 调用run()方法为什么是单线程的呢?
            // 因为run()方法直接调用其实就相当于普通的方法调用,所以你看到的是单线程的效果
            // 要想看到多线程的效果,就必须说说另一个方法:start()
            // 面试题:run()和start()的区别?
            // run():仅仅是封装被线程执行的代码,直接调用是普通方法
            // start():首先启动了线程,然后再由jvm去调用该线程的run()方法。
            // MyThread my = new MyThread();
            // my.start();
            // // IllegalThreadStateException:非法的线程状态异常
            // // 为什么呢?因为这个相当于是my线程被调用了两次。而不是两个线程启动。
            // my.start();
    
            // 创建两个线程对象
            MyThread my1 = new MyThread();
            MyThread my2 = new MyThread();
    
            my1.start();
            my2.start();
    /*
     * 该类要重写run()方法,为什么呢?
     * 不是类中的所有代码都需要被线程执行的。
     * 而这个时候,为了区分哪些代码能够被线程执行,java提供了Thread类中的run()用来包含那些被线程执行的代码。
     */
    public class MyThread extends Thread {
    
        @Override
        public void run() {
            // 自己写代码
            // System.out.println("好好学习,天天向上");
            // 一般来说,被线程执行的代码肯定是比较耗时的。所以我们用循环改进
            for (int x = 0; x < 200; x++) {
                System.out.println(x);
            }
        }

    用对象设置名称

    • 方法1
            MyThread my1 = new MyThread("林青霞");
            MyThread my2 = new MyThread("刘意");
    • 方法2
             MyThread my1 = new MyThread();
             MyThread my2 = new MyThread();
    //    //调用方法设置名称
             my1.setName("林青霞");
             my2.setName("刘意");

        thread中的方法

    public class MyThread extends Thread {
    
        public MyThread() {
        }
        
        public MyThread(String name){
            super(name);
        }
    
    @Override
    public void run() { for (int x = 0; x < 100; x++) { System.out.println(Thread.currentThread().getName() + ":" + x); } } }

    第二种方式

    MyRunnable my = new MyRunnable();
    
            // 创建Thread类的对象,并把C步骤的对象作为构造参数传递
            // Thread(Runnable target)
            // Thread t1 = new Thread(my);
            // Thread t2 = new Thread(my);
            // t1.setName("林青霞");
            // t2.setName("刘意");
    
            // Thread(Runnable target, String name)
            Thread t1 = new Thread(my, "林青霞");
            Thread t2 = new Thread(my, "刘意");

    接口类为

    public class MyRunnable implements Runnable {
    
        @Override
        public void run() {
            for (int x = 0; x < 100; x++) {
                // 由于实现接口的方式就不能直接使用Thread类的方法了,但是可以间接的使用
                System.out.println(Thread.currentThread().getName() + ":" + x);
            }
        }
    
    }
  • 相关阅读:
    做了一些心理学的测试,分析下个人
    做了一些心理学的测试,分析下个人
    逆转一个整数
    打印九九乘法表
    计算两个日期相差多少天
    struct的使用
    Linux Vim替换字符串的一些方法小结
    CentOS里vim基本操作
    如何创建一个后台进程
    高中是个把人分类的机器(转)
  • 原文地址:https://www.cnblogs.com/G-JF/p/9326088.html
Copyright © 2011-2022 走看看