`
keating
  • 浏览: 166452 次
  • 性别: Icon_minigender_1
  • 来自: weihai
社区版块
存档分类
最新评论

附注 OF 《怎么写,程序才能死锁?》

    博客分类:
  • Java
阅读更多
这只是一篇附注,请看博客文章 怎么写,程序才能死锁? http://keating.iteye.com/blog/983365

参考1,线程死锁

Thread1Thread2
目的获取i获取j
步骤获取i获取j
等待j被释放,获取j等待i被释放,获取i
释放i释放j


public class NewClass {

    boolean i = false;
    boolean j = false;

    public void begin() {
        Thread t1 = new Thread(new Thread1());
        Thread t2 = new Thread(new Thread2());
        t1.start();
        t2.start();
    }

    public static void main(String[] args) {
        new NewClass().begin();
    }

    class Thread1 implements Runnable {

        /**
         * 目的:获取j
         *
         * 步骤:
         * 获取i,
         * 等待j被释放,获取j
         * 释放i
         */
        public void run() {
            // 获取i
            i = true;

            // 休息一下,让另一个线程充分占有j
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }

            // 等待j被释放,获取j
            while (j) {
            }
            j = true;

            // 释放i
            i = false;
        }
    }

    class Thread2 implements Runnable {

        /**
         * 目的:获取i
         *
         * 步骤:
         * 获取j,
         * 等待i被释放,获取i
         * 释放j
         */
        public void run() {
            // 获取j
            j = true;

            // 等待i被释放,获取i
            while (i) {
            }
            i = true;

            // 释放j
            j = false;
        }
    }
}


参考2,DatabaseConnection类

public class DatabaseConnection {

    private Connection con = null;
    private Statement stat = null;
    private PreparedStatement pstat = null;
    private ResultSet rs = null;

    public Connection con () {
        return con;
    }

    private void createConnection() throws Exception {
        try {
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
            } catch (InstantiationException ex) {
                Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
            }
            StringBuilder sd = new StringBuilder("jdbc:sqlserver://");
            sd.append("localhost:1433;DatabaseName=");
            sd.append("FWDMS");//database name
            String url = sd.toString();
            DriverManager.setLoginTimeout(10);//设置连接超时为10秒
            con = DriverManager.getConnection(url, "sa", "sa");
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }

    public static DatabaseConnection newInstance() throws Exception {
        DatabaseConnection dc = new DatabaseConnection();
        dc.createConnection();
        return dc;
    }

    public ResultSet query(String sql) {
        try {
            stat = con.createStatement();
            rs = stat.executeQuery(sql);
        } catch (Exception ex) {
            Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
        return rs;
    }

    public void update(String sql) {
        try {
            stat = con.createStatement();
            stat.executeUpdate(sql);
        } catch (Exception ex) {
            Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void update(String sql, String[] args) {
        try {
            pstat = con.prepareStatement(sql);
            for (int i = 0; i < args.length; i++) {
                pstat.setString(i + 1, args[i]);
            }
            pstat.executeUpdate();
        } catch (Exception ex) {
            Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void close() {
        //check null,then close rs,stat,pstat and con.
        try {
            if (rs != null) {
                rs.close();
            }
            if (stat != null) {
                stat.close();
            }
            if (pstat != null) {
                pstat.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
分享到:
评论

相关推荐

    18什么情况下Java程序会产生死锁?如何定位、修复?

    什么情况下Java程序会产生死锁?如何定位、修复?pdf中有介绍

    35丨记一次线上SQL死锁事故:如何避免死锁?.html

    35丨记一次线上SQL死锁事故:如何避免死锁?.html

    C#进程监控,监视程序是否崩溃、死锁?

    监控进程状态,无界面、托盘图标。

    如何理解3D动画中的欧拉角以及死锁?.zip

    如何理解3D动画中的欧拉角以及死锁?以及包含了自动驾驶学习资料集: 涵盖感知,规划和控制,ADAS,传感器; 1. apollo相关的技术教程和文档; 2. adas(高级辅助驾驶)算法设计(例如AEB,ACC,LKA等) 3. 自动驾驶...

    什么是死锁,如何避免死锁?Java死锁详解

    什么是死锁 死锁是指多个进程因竞争资源而引起的一种僵局,如果没有外力作用,所有进程都不会向前推进。 举例:假如有线程Thread1和Thread2,两个都要访问共享资源AB,Thread1和Thread2一个先访问A再访问B,另一个先...

    jKill#basic-notes#什么情况下会发生死锁,如何解决死锁?1

    会出现死锁的情况产生死锁的4个必要条件:互斥:资源一次只允许一个session访问,其他session需要等待正在访问的事务结束。如何解决死锁通用的死锁解决方案

    数据库 死锁的解决

    这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法 仔细分析你程序的逻辑, 1:尽量避免同时锁定两个资源 2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源. ...

    操作系统-死锁.pptx

    第7讲 进程死锁 2022/6/20 2 今日主题 什么是死锁?(了解) 死锁防止(熟悉) 死锁避免(掌握) 死锁检测和恢复(熟悉) [重点]:死锁必要条件、死锁防止、避免、检测和恢复 [难点]:银行家算法。 操作系统-死锁...

    Java面试-彻底搞懂死锁的前世今生

    本文就什么是死锁?怎么找到死锁?怎么解决死锁?怎么避免死锁等问题展开分析,通过大量的代码和案例演示向大家描述死锁的前世今生。 快速到达看这里死锁是什么,有什么危害?写一个死锁的例子案例一:必然发生死锁...

    操作系统实验报告--模拟死锁避免程序

    设计模拟实现死锁避免的程序,要求: 1,输入并显示资源类型数,进程数,每类资源的个体数; 2,输入每个进程对每类资源的最大需求量,已分量,算出其剩余需求量。算出系统每类资源的当前剩余量;显示输入和计算出的...

    基于java的开发源码-多线程程序死锁检查 JCarder.zip

    基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip ...

    Java多线程程序死锁检查 JCarder

    Java多线程程序死锁检查 JCarder

    死锁检测源代码

    死锁检测源代码

    操作系统常用的死锁程序

    计算机操作系统第三版关于死锁的问题,程序代码

    一个简单的和死锁有关的程序

    这是和死锁有关的问题,和简单的一个例子!

    解决ORACLE死锁问题

    一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列...

    车辆行驶死锁问题

    车辆行驶死锁问题,在Linux下用C语言完成下面模型:设有一个T型路口,其中A,B,C,D各处可容纳一辆车,车型方向如图所示。找出死锁并用有序分配法消除之,要求资源编号合理。

    查看 oracle 死锁程序

    查看 oracle 死锁程序 本程序可轻松查看oracle数据库是否有表锁死

    操作系统银行家算法避免死锁

    (1)请设计一个程序演示死锁避免算法(银行家算法)。 (2)要求该演示程序可以指定任意的进程数量、资源种类、每种资源总数量(大于等于1)、已分配数量、最大需求数量,同时也可以随机生成上述数值进行模拟(随机...

    操作系统-死锁

    从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...

Global site tag (gtag.js) - Google Analytics