学java 中碰到的问题

一、myeclipse中部署的时候看不到项目的问题

 

 

问题描述: 点击myeclipse的项目部署, 发现在project下拉框里没有想要部署的项目

一开始我想将ispserver项目发布到tomcate里但是在project下拉列表里没有ispserver这个项目的

名字。

解决方法:

右键点击该项目,选择myeclipse---> Add Web project Capabilities (添加web项目)

二、formbean的属性得不到值

问题描述:在struts项目一个实现用户登录的功能.在action中调用actioniForm 的getPassword方法

得到提交的密码。但是得到的值一直为空。

解决方法:

public class LoginForm extends ActionForm {
	
	private String password;

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	

}

loginForm 中的属性password必须和html中的名一致。

<input type=”text” name=”password”>

必须要有getXXX和setXXX方法。

 

三、md5加密

 

package com.student.common.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
	
	
	public static String md5(String input )
	{
		
		MessageDigest md5;
		String result = "";
		try {
			//加密
			md5 = MessageDigest.getInstance("Md5");
			md5.update(input.getBytes());
			//字节转换成字符串
			result = new sun.misc.BASE64Encoder().encode(md5.digest());
			/*sun.misc.BASE64Encoder().encode()在jdk中是没有的,这是sun内部用的方法。
                          有可能你的jdk中没有。被SUN删除了。
                         编译会有警告提示。
                       */
		} catch (NoSuchAlgorithmException e) {
			
			e.printStackTrace();
		}
		
		return result;
	}

}

四、重载,覆盖 一些区别

 

 200901111231684263109

 

200901111231684293781

 

 

27212_1234098496AxDj

 

五、extjs 中layout的解释

extjs的容器组件都可以设置它的显示风格,它的有效值有 absolute, accordion, anchor, border, card, column, fit, form and table. 一共9

http://virgos.javaeye.com/blog/288924

 

六、struts中action的标签属性

<form-beans >
     <form-bean name="loginForm" type="com.student.web.form.LoginForm"/>
     <form-bean name="userConsoleForm" type="com.student.web.form.UserConsoleForm"/>
  </form-beans>
<action path="/userConsole" attribute="userConsoleForm" name="userConsoleForm"  parameter="method" scope="request" type="com.student.web.UserConsoleAction">
      <forward name="list" path="/web/user/userlist.jsp"/>
</action>


name的值对应为form-bean中的name,attribute的值对应为一个map的key

当一个form-bean被创建的时候,会建立一个map来保存form-bean,attribute 为key,name为该对象的引用。

第一次访问不存在的form-bean时会创建一个,第二次访问时就不用在创建了。

 

七、hibernate中createSQLQuery与createQuery的区别

1.createSQLQuery用的是sql语句进行查询的,createQuery用的是hql查询语句。

2、createSQLQuery是以对象数组进行存储,createQuery是以hibernate生成的Bean为对象装入list返回。

 

参考http://kevinhrw.javaeye.com/blog/324193

 

八、线程的同步

 1、实现资源共享必须以实现接口的形式实现线程。

package com.student.common.util;
 class MyThread implements Runnable {
		
	private    int ticket =10;
		
	public  void  run() 
	{
		for(int i=0 ; i<20;i++)
		{
		  
			//System.out.println("线程"+name+"在运行");
			if(this.ticket>0){
				
				try {
				Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
                      System.out.println(Thread.currentThread().getName()+"售票"+this.ticket);
				
		this.ticket--;
			}
		  }
		
	}
	

}


public class Test {
	
	public static void main(String[] args) {
		Runnable mt = new MyThread();
		Thread t1 = new Thread(mt);
		Thread t2 = new Thread(mt);
		Thread t3 = new Thread(mt);
		
		t1.start();
		
		t2.start();
		t3.start();
	}
	 
}


执行结果:

Thread-0售票10
Thread-2售票10
Thread-1售票10
Thread-1售票7
Thread-0售票6
Thread-2售票5
Thread-1售票4
Thread-0售票3
Thread-2售票2
Thread-1售票1
Thread-0售票0
Thread-2售票-1

 

我们发现,一张票被卖了两次。而且还出现了-1这样的票。这时我们就要用到线程的同步了synchiorzied

我们修改代码如下:

package com.student.common.util;
 class MyThread implements Runnable {
	
	
	private    int ticket =10;
	
	//这里和上面不同
	public synchronized void  run() 
	{
		for(int i=0 ; i<20;i++)
		{
		  
			//System.out.println("线程"+name+"在运行");
			if(this.ticket>0){
				
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName()+"售票"+this.ticket);
				
				this.ticket--;
			}
		  
		}
	}
	

}

public class Test {
	
	public static void main(String[] args) {
		Runnable mt = new MyThread();
		
		Thread t1 = new Thread(mt);
		Thread t2 = new Thread(mt);
		Thread t3 = new Thread(mt);
		
		t1.start();
		
		t2.start();
		t3.start();
	}
	 
}

我们看下执行结果:

Thread-0售票10
Thread-0售票9
Thread-0售票8
Thread-0售票7
Thread-0售票6
Thread-0售票5
Thread-0售票4
Thread-0售票3
Thread-0售票2
Thread-0售票1

虽然售出票的没什么问题,我们发现票都被一个线程买完了,其他线程都卖不了票了。这时我们应该同

步代码块加错位置,应加在程序判断位置。

package com.student.common.util;
 class MyThread implements Runnable {
	
	private    int ticket =10;
	
	
	public  void  run() 
	{
		for(int i=0 ; i<20;i++)
		{
		  
			//System.out.println("线程"+name+"在运行");
	       synchronized (this){
			if(this.ticket>0){
				
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
          System.out.println(Thread.currentThread().getName()+"售票"+this.ticket);
				
				this.ticket--;
			}
	       }
	   }
	}


}

public class Test {
	
	public static void main(String[] args) {
		Runnable mt = new MyThread();
		Thread t1 = new Thread(mt);
		Thread t2 = new Thread(mt);
		Thread t3 = new Thread(mt);
		
		t1.start();
		t2.start();
		t3.start();
	}
	 
}
执行结果:
 

Thread-0售票10
Thread-0售票9
Thread-0售票8
Thread-0售票7
Thread-2售票6
Thread-2售票5
Thread-2售票4
Thread-1售票3
Thread-1售票2
Thread-2售票1

多个线程共享同一个资源,肯定是需要同步的,以保证数据的正确性,但是同步是需要牺牲性能

同时还必须注意死锁的问题,比如下面一个例子。

package com.student.common;



class  Lisi {
	
	public synchronized void give(Wanwu w){
		System.out.println("给我钱");
		w.send();
	}
	
	public synchronized void free()
	{
		System.out.println("放人");
	}
	
}

class Wanwu {
	
	public synchronized void give(Lisi l)
	{
		System.out.println("给我人");
		l.free();
	}
	
	public synchronized void send(){
		System.out.println("给钱");
	}
	
}
public class ThreadDemo1 extends Thread {
	
    	Lisi li = new Lisi();
	    Wanwu W = new Wanwu();
	
	  public ThreadDemo1() {
	     this.start();
	     li.give(W);
	 }
	  
	  public void run(){
           W.give(li);		  
	  }
	
      public static void main(String[] args) {
		new ThreadDemo1();
	}
}


执行结果:

image

要解除死锁,只有把send或者free的synchronized删除。

posted @ 2010-05-14 15:16  phpzxh  阅读(374)  评论(0编辑  收藏  举报