精华内容
下载资源
问答
  • java编写的下载程序

    2009-03-29 18:23:24
    java编写的下载程序java编写的下载程序java编写的下载程序java编写的下载程序java编写的下载程序java编写的下载程序java编写的下载程序java编写的下载程序java编写的下载程序java编写的下载程序java编写的下载程序
  • java,程序编写

    2011-12-29 22:53:08
    java,程序编写
  • JAVA编写计算器小程序的实现用java实现计算器小程序的编写用java实现计算器小程序的编写用java实现计算器小程序的编写用java实现计算器小程序的编写
  • wc_javajava语言编写wc程序
  • java编写的日历程序

    2016-12-02 16:19:47
    java编写的日历程序
  • 小巧 实用 JAVA 开发工具 JCREATOR java 开发工具 程序编写 程序开发
  • Java实践 为练习 Java编写程序
  • 分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!...如何检测Java中的死锁 虽然这可以有很多答案,但我的版本是首先我会看看代码,如果我看到一个嵌套的同步块...

    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net

    问题总是以“什么是死锁?”开始

    当两个或多个线程在等待彼此释放所需的资源(锁定)并陷入无限等待即是死锁。它仅在多任务或多线程的情况下发生。

    如何检测Java中的死锁

    虽然这可以有很多答案,但我的版本是首先我会看看代码,如果我看到一个嵌套的同步块,或从一个同步的方法调用其他同步方法,或试图在不同的对象上获取锁,如果开发人员不是非常小心,就很容易造成死锁。

    另一种方法是在运行应用程序实际锁定时找到它,尝试采取线程转储,在Linux中,你可以通过kill -3命令执行此操作,这将打印应用程序日志文件中所有线程的状态,并且你可以看到哪个线程被锁定在哪个线程对象上。

    你可以使用fastthread.io网站等工具分析该线程转储,这些工具允许你上载线程转储并对其进行分析。

    另一种方法是使用jConsole或VisualVM,它将显示哪些线程被锁定以及哪些对象被锁定。

    如果你有兴趣了解故障排除工具和分析线程转储的过程,建议你看看Uriah Levy在多元视觉(PluraIsight)上的《分析Java线程转储》课程。此课程旨在详细了解Java线程转储,并熟悉其他流行的高级故障排除工具。

    编写一个将导致死锁的Java程序

    这是我的版本之一

    package chimomo.learning.java.code.multithreading.deadlock;
    
    /**
     * 通过强制循环等待来创建死锁
     *
     * @author Created by Chimomo
     */
    public class DeadLockDemo {
        public void method1() {
            synchronized (String.class) {
                System.out.println("Acquired lock on String.class object");
            }
            synchronized (Integer.class) {
                System.out.println("Acquired lock on Integer.class object");
            }
        }
    
        public void method2() {
            synchronized (Integer.class) {
                System.out.println("Acquired lock on Integer.class object");
            }
            synchronized (String.class) {
                System.out.println("Acquired lock on String.class object");
            }
        }
    }

    如果method1()和method2()都由两个或多个线程调用,则存在死锁的可能性,因为如果线程1在执行method1()时在String对象上获取锁,线程2在执行method2()时在Integer对象上获取锁,等待彼此释放Integer和String上的锁以继续进行下一步,但这永远不会发生。

    其理念是,你应该知道使用常见并发模式的正确方法,如果你不熟悉这些模式,那么Jose Paumard的《应用于并发和多线程的常见Java模式》是学习的好起点。

    如何避免Java中的死锁

    在我看来,这是最重要的部分之一:如何修复代码中的死锁?或如何避免Java中的死锁?

    如果你仔细查看了上面的代码,那么你可能已经发现死锁的真正原因不是多个线程,而是它们请求锁的方式。如果你提供有序访问,则问题将得到解决。

    下面是我的修复版本,它通过避免循环等待,而避免死锁,从而不需要抢占,这是需要死锁的四个条件之一。

    package chimomo.learning.java.code.multithreading.deadlock;
    
    /**
     * @author Created by Chimomo
     */
    public class FixedDeadLockDemo {
        public void method1() {
            synchronized (Integer.class) {
                System.out.println("Acquired lock on Integer.class object");
            }
            synchronized (String.class) {
                System.out.println("Acquired lock on String.class object");
            }
        }
    
        public void method2() {
            synchronized (Integer.class) {
                System.out.println("Acquired lock on Integer.class object");
            }
            synchronized (String.class) {
                System.out.println("Acquired lock on String.class object");
            }
        }
    }

    现在没有任何死锁,因为两种方法都按相同的顺序访问Integer和String类上的锁。因此,如果线程A在Integer对象上获取锁,则线程B不会继续,直到线程A释放Integer锁。即使线程B持有String锁,线程A也不会被阻止,因为现在线程B不会期望线程A释放Integer锁以继续。

    展开全文
  • JavaAssignment:使用JAVA在TAFE编写的小程序。 使用JPanel UI允许用户购买物品
  • 复活 此仓库包含我学习Java编写程序。 学习Java是指我学习Java编写程序
  • java编写的聊天程序

    2011-06-20 13:17:07
    java编写的聊天程序,支持多用户,中文系统和日文系统下均不乱码
  • Java 各种用Java编写程序和应用程序
  • Java代码 用Java编写的随机程序
  • java编写打开摄像头程序;学习java开发的实用程序
  • java编写的扫雷程序

    2009-03-06 15:21:08
    java编写的简单扫雷程序java编写的简单扫雷程序
  • java用applet编写屏保程序,每秒显示一个大小不定(直径50-100之间)位置不定(必须窗口内)的圈 窗口宽800,高600
  • java编写的绘图程序

    2012-06-03 21:49:09
    java编写的绘图程序,My eclipse 开发,包含工程项目
  • 绘图程序 用java swing用java编写的绘图程序。 使用的 IDE 是 NetBeans。
  • Java编写聊天程序

    2015-07-14 10:33:34
    一个Java编写的聊天小程序,速度非常快,可以达到10M/s
  • Java在编写网络通信程序中的应用,可以帮助您快速的了解java在网络通信程序中的应用
  • Java编程 翻译 编写程序,输入数字,使之转化为英语
  • java程序编写要点

    2012-10-02 15:49:20
    java程序编写要点,对于初学者来说,了解Java程序编写要点,能起到事半功倍的效果
  • JAVA编写的计算器程序

    2010-01-12 17:04:35
    JAVA编写的计算器程序 第一次写大的程序
  • JAVA——编写时钟程序

    千次阅读 多人点赞 2018-09-23 21:42:26
    编写时钟程序 1.要求 创建一个窗口并实时显示当前时间,每1秒时钟内容更新一次,界面中包含数字式和表盘式的显示。 2.语法 Java.util.Calendar包的使用 绘制时钟图形 GregorianCalendar()的用法 ...

    编写时钟程序


    1.要求

    创建一个窗口并实时显示当前时间,每1秒时钟内容更新一次,在界面中包含数字式和表盘式的显示。

    2.语法

    • Java.util.Calendar包的使用
      绘制时钟图形
    • GregorianCalendar()的用法
      Calender now=new GregorianCalendar();
    • 绘制图形Graphics2D g2D=(Graphics2D)g;,Graphics强制类型转换成Graphics2D。
    • 获取系统时间。
      1)int hour=now.get(Calendar.HOUR_OF_DAY):取得当前的小时部分;
      2)int minute=now.get(Calendar.MINUTE):取得当前时间的分钟部分;
      3)int second =now.get(Calendar.SECOND):取得当前时间的秒。

    3.代码

    绘制时钟图形:

    //绘制图形
    		Graphics2D g2D=(Graphics2D) g;//Graphics强制类型转换成Graphics2D
    		Insets insets =getInsets();//创建JFrame的边界对象
    		int L=insets.left/2,T=insets.top/2;//L=左边界的2/1,T=上边界的2/1
    		h =getSize().height;//返回JFrame的高度
    		g.setColor(new Color(115,74,18));//设置画笔颜色为棕色
    		//画圆
    		g2D.setStroke(new BasicStroke(5.0f));//勾画出宽度为4cm的圆
    		g.drawOval(L+40,T+40,h-80,h-80);//
    		r=h/2-40;
    		x_1=40+r-5+L;
    		y_1=40+r-5-T;
    		ang=60;
    		//绘制时钟上的12个字
    		g.setFont(new Font("",Font.BOLD,12));
    		g.setColor(new Color(255,255,255));
    		for(int i=1;i<=12;i++) {
    			x=(int)((r+12)*Math.cos(RAD * ang)+x_1);
    			y=(int)((r+12)*Math.sin(RAD * ang)+y_1);
    			g.drawString(""+ i,x, h-y);
    			ang -=30;
    		}
    

    获得现在的时间:

    Calendar now=new GregorianCalendar();//创建Calender对象now
    		int hour=now.get(Calendar.HOUR_OF_DAY);//取得当前的小时部分
    		int minute=now.get(Calendar.MINUTE);//取得当前时间的分钟部分
    		int second =now.get(Calendar.SECOND);//取得当前时间的秒
    		String st;
    		if(hour<10)
    			st="0"+hour;
    		else
    			st=""+hour;
    		if(minute<10)
    			st+=":0"+minute;
    		else
    			st +=":"+minute;
    		if(second<10)
    			st+=":0"+second;
    		else
    			st +=":"+second;
    		//窗体上显示时间格式,如00:00:00
    
    

    擦除秒针,原理是将秒针颜色改变为原来的背景颜色(绘制分针和时针的原理与此相同):

    if(ss_x>0) {//擦除秒针,原理为改变为原来的背景颜色
    			g.setColor(getBackground());
    			g.drawLine(x_1, y_1, ss_x, h-ss_y);
    		}else {
    			old_m = mm;
    			old_h = hh;
    		}
    
    

    绘制秒针:

    x=(int)(r*0.9*Math.cos(RAD*ss))+x_1;
    		y=(int)(r*0.9*Math.sin(RAD*ss))+y_1-2*T;
    		g.setColor(new Color(255,99,71));
    		g.drawLine(x_1, y_1, x, h-y);
    		ss_x=x;
    		ss_y=y;
    
    

    新建窗口并创建一个时间计数器,实现每一秒触发一次:

    	public rw23() {
    		super("JAVA 小时钟");
    		setDefaultCloseOperation(3);
    		Image image =getToolkit().getImage("1.jpg");
    		setIconImage(image);
    		setSize(500,500);
    		setBackground(Color.black);
    		setLocation(300,150);
    		setResizable(false);
    		setVisible(true);
    		show();
    		int delay =1000;
    		ActionListener draw =new ActionListener() {//创建一个监听事件
    			public void actionPerformed(ActionEvent evt) {
    				repaint();
    			}
    				
    		};
    		new Timer(delay,draw).start();//创建一个时间计数器,每一秒触发一次
    	}
    

    完整的代码可点此进行获取:
    https://download.csdn.net/download/atishoo_13/10684018
    若想改变窗口的颜色,可参看RGB颜色查询对照表:
    https://blog.csdn.net/Atishoo_13/article/details/82788669

    4.结果

    编译结果如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    运行结果如下图所示:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Java聊天软件程序编写

    2016-05-05 22:19:05
    java编写的聊天软件,有程序源代码
  • java编写的记事本程序

    2012-02-18 22:54:20
    java编写的记事本程序,具有改写字体,大小,字形功能,注释详细
  • java编写的拼图程序

    2012-09-04 22:27:28
    java编写的拼图程序,也是java限选课提交的最后的源程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 882,050
精华内容 352,820
关键字:

java在哪里编写程序

java 订阅