• java线程几个重要概念(2)


    1.线程的安全问题发生的条件

    只有当线程访问了共享的数据时,才会发生线程的安全问题!!!

    2.线程的同步代码块,同步方法(静态方法,普通方法)

    同步代码块的锁:"为任意的一个字符串都可以锁”

    同步方法(普通):锁对象就是 this   (静态方法):锁对象就是本类的字节码.class对象

    
    
    public class TicketDemo implements Runnable{

    //private int ticket = 100;

    private static int ticket = 50;

    @Override
    public void run() {
    while (true){
    // synchronized ("锁"){ //同步代码块 锁对象为任意的一个对象
    // if(ticket>0){
    // try {
    // System.out.println(Thread.currentThread().getName()+"正在买第"+ticket+"张票");
    // Thread.sleep(1000);
    // ticket--;
    // } catch (InterruptedException e) {
    // e.printStackTrace();
    // }
    // }
    // }
    palyTicket();
    }
    }




    public synchronized void palyTicket(){ //同步方法 所对象就是this
    if(ticket>0){
    try {
    System.out.println(Thread.currentThread().getName()+"正在买第"+ticket+"张票");
    Thread.sleep(1000);
    ticket--;
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }
     
    public class DemoMain {
    
        public static void main(String[] args) {
    
            TicketDemo t1= new TicketDemo(); //这个就是被共享的资源对象
    
            //对个线程访问了同一个资源对象TicketDemo
            Thread t = new Thread(t1);
            t.start();
    
            Thread t2 = new Thread(t1);
            t2.start();
        }
    
    }

    线程的生命周期

    借鉴一张内存图(了解线程为什么会阻塞)当一个 线程得到了 “锁” 抢到了执行权 但是在执行的过程中 遇到Sleep进入睡眠状态 那么这个时候 其他的线程必须等该线程醒来后执行完程序归还“锁”后才能进行执行,所以在这段时间内其他的线程就进入了“阻塞”的状态

     

    线程的实现原理

    坚持
  • 相关阅读:
    进程/线程/协程的区别
    短域名设计思路
    https建立连接过程
    javacpu/内存使用率过高问题排查
    tcp拥塞控制
    node面试题
    ES6面试题
    axios面试题
    轮询
    Flume拦截器
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12835594.html
Copyright © 2020-2023  润新知