学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删除。

你可能感兴趣的:(java)