zoukankan      html  css  js  c++  java
  • 深度解析线程工作原理

      1, 线程的概念
        一个程序中的方法有几条执行路径, 就有几个线程

      2, 线程的创建

        两种方式:

          1, 继承Thread

            class TestThread extends Thread {......}

          2, 实现Runnable接口, 然后作为参数传入到Thread类的构造方法中

            class TestThread implements Runnable {......}

        线程的启动:

        调用线程类中的start()方法, 不能直接调用run()方法, 直接调用run()方法那叫方法调用, 不是启动线程

      3, 线程常用方法

        isAlive()

          判断线程是否还活着, 调用start()之前和终止之后都是死的, 其他的都是活的

        interrupt()

          停止线程

        getPriority()

        setPriority(int i)

        设置优先级, 优先级的概念: 谁的优先级高, 谁执行的时间就多

        Thread里面的默认优先级:

          Thread.MIN_PRIORITY = 1

          Thread.MAX_PRIORITY = 10

          Thread.NORM_PRIORITY = 5

        Thread.sleep(1000);   将程序暂定一会

        join() 合并线程

        yield() 让出CPU执行其他线程

      4, 线程同步

        synchronized

      线程同步解析:

    package com.maya.sync.deadlock;
    
    public class TestPractise implements Runnable {
    
        private int b = 100;
        
        public synchronized void m1() {
            b = 1000;
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("m1: " + b);
        }
        
        public synchronized void m2() {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            b = 2000;
        }
        
        public void run() {
            m1();
        }
        
        public static void main(String[] args) {
            TestPractise tp = new TestPractise();
            Thread t = new Thread(tp);
            t.start();
            tp.m2();
            // 两个方法都修改了同一个值, 这两个方法都应该加上synchronized
            System.out.println("main: " + tp.b);
        }
        
        /* 先执行m2,再执行m1
         * 一条记录, 加锁是应该加在改的方法上还是读的方法上
         */
    }
  • 相关阅读:
    HTML常用标签1
    mysql 多对多拆分成 一对多(学生,选修课,成绩)
    JDBC工具包使用
    类反射,用于JDBC
    JDBC基础语句使用
    关于线程等待、线程唤醒方法的引入
    synchronized站点抢票同步例题
    python-装饰器
    jwt, token, session和cookies
    miniapp之登录、授权和支付
  • 原文地址:https://www.cnblogs.com/bekeyuan123/p/6935436.html
Copyright © 2011-2022 走看看