b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java多线程死锁 moira33的博客(3)

电脑杂谈  发布时间:2017-12-25 23:02:18  来源:网络整理
public class TicketDemo {
    public static void main(String[] args) {
        Ticket t = new Ticket();
        Thread t1 = new Thread(t);//创建了一个线程;运行Ticket t里面的run方法
        Thread t2 = new Thread(t);//创建了一个线程;
        Thread t3 = new Thread(t);//创建了一个线程;
        Thread t4 = new Thread(t);//创建了一个线程;
        Thread t5 = new Thread(t);//创建了一个线程;
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();

        //如用下面方法1 extends Thread,四个窗口各卖100张票共400张票,比总票数100张多,不合理;故用上面方法2 implements Runnable
        /*
        Ticket t1 = new Ticket();
        //Ticket t2 = new Ticket();
        //Ticket t3 = new Ticket();
        //Ticket t4 = new Ticket();
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        */
    }
}

java多线程死锁_java线程死锁解决_java面试多线程

格式: 在函数上加上synchronized修饰符即可。

同步函数用的是哪一个锁:

1. 函数需要被对象调用。那么函数都有一个所属对象引用,就是this,所以同步函数使用的锁是this。

2. 静态的同步方法,使用的锁是该方法所在类的字节码文件对象:

类名.class

因为静态方法中不可以定义this。静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象:类名.class

如何找线程安全问题:

1,明确哪些代码是多线程运行代码。

2,明确共享数据。

3,明确多线程运行代码中哪些语句是操作共享数据的。

有两个储户分别存300元,每次存100,存3次。

目的:该程序是否有安全问题,如果有,如何解决?

public class Bank {
    private int sum;

    public synchronized void add(int n) {
        sum = sum + n;
        try {
            Thread.sleep(10);
        } catch (Exception e) {
        }
        System.out.println("sum=" + sum);
    }
}
public class Cus implements Runnable {
    private Bank b = new Bank();

    public void run() {
        for (int x = 0; x < 3; x++) {
            b.add(100);
        }
    }
}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55883-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...