漫笔1
随笔1
建表语句(MySQL)
算法参考:http://www.iteye.com/problems/98441
————————————————————————————————————————————————————————————————————
简单多线程操作同一变量
package test; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MainCalcuate { private static List<Integer> list = new ArrayList<Integer>(); //用于存放左边一组数据 private static List<Integer> leftList = new ArrayList<Integer>(); //用于存放右边一组数据 private static List<Integer> rightList = new ArrayList<Integer>(); //统计左边集合的和 private static int leftValue = 0; //统计右边集合的和 private static int rightValue = 0; public static void doMain(int arry[]) { for(int i=0;i<arry.length;i++){ list.add(arry[i]); } Collections.shuffle(list); //System.out.println(list); while(list.size()!=0){ balance(leftValue,rightValue); } //System.out.println(leftList + "=" + leftValue); //System.out.println(rightList + "=" + rightValue); MyReduce.myJDBCInsert(leftValue, rightValue, leftList.toString() ,rightList.toString()); leftValue = 0; rightValue = 0; leftList.removeAll(leftList); rightList.removeAll(rightList); } //核心算法 public static void balance(int left,int right){ int x = list.remove(0); if(x+left>x+right){ rightList.add(x); rightValue = rightValue+x; }else{ leftList.add(x); leftValue = leftValue+x; } } }
package test; import java.util.Random; public class MainProgram implements Runnable{ //假设数值范围为1-10 private static final int number = 10; //数组大小 private static final int arrayNumber = 10; private static int count = 0; private static final int arry[] = getArry(); public void run() { /**数字越大,答案越多,成功率也越高*/ while(count!=(arrayNumber*2)){ MainCalcuate.doMain(arry); count++; } } public static int[] getArry(){ //随机生成1-10之间的十个数 int arry[] = new int[arrayNumber]; for(int i=0;i<arrayNumber;i++){ arry[i] = new Random().nextInt(number)+1; } return arry; } public static void main(String[] args) { Thread t = new Thread(new MainProgram()); t.start(); } }
package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class MyReduce { public static void myJDBCInsert(int left,int right,String leftArry,String rightArry){ try{ Class.forName("com.mysql.jdbc.Driver"); String URL="jdbc:mysql://localhost:3306/test"; String Username="root"; String Password=""; Connection conn=DriverManager.getConnection(URL,Username,Password); String sql = "insert into test(LEFTVALUE,RIGHTVALUE,LEFTARRY,RIGHTARRY) values(?,?,?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1,left); pstmt.setInt(2,right); pstmt.setString(3,leftArry); pstmt.setString(4,rightArry); pstmt.executeUpdate(); pstmt.close(); conn.close(); }catch(Exception e){ e.printStackTrace(); } } public static void myJDBCAnaly(){ try{ Class.forName("com.mysql.jdbc.Driver"); String URL="jdbc:mysql://localhost:3306/test"; String Username="root"; String Password=""; Connection conn=DriverManager.getConnection(URL,Username,Password); String sql = "SELECT test.LEFTARRY,test.RIGHTARRY " + "FROM test " + "WHERE ABS(test.LEFTVALUE-test.RIGHTVALUE)" + "=(SELECT MIN(ABS(test.LEFTVALUE-test.RIGHTVALUE)) " + "FROM test)"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while(rs.next()){ System.out.print(rs.getString("LEFTARRY")+"="); System.out.println(rs.getString("RIGHTARRY")); } pstmt.close(); conn.close(); }catch(Exception e){ e.printStackTrace(); } } public static void deleteDB(boolean flag){ if(flag){ try{ Class.forName("com.mysql.jdbc.Driver"); String URL="jdbc:mysql://localhost:3306/test"; String Username="root"; String Password=""; Connection conn=DriverManager.getConnection(URL,Username,Password); String sql = "delete from test"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.executeUpdate(); pstmt.close(); conn.close(); }catch(Exception e){ e.printStackTrace(); } } } public static void main(String[] args) { MyReduce.myJDBCAnaly(); deleteDB(true); } }
建表语句(MySQL)
/* Navicat MySQL Data Transfer Source Server : mysql Source Server Version : 50610 Source Host : localhost:3306 Source Database : test Target Server Type : MYSQL Target Server Version : 50610 File Encoding : 65001 Date: 2013-10-24 16:34:51 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `test` -- ---------------------------- DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `key` int(11) NOT NULL AUTO_INCREMENT, `LEFTVALUE` int(11) NOT NULL, `RIGHTVALUE` int(11) NOT NULL, `LEFTARRY` varchar(255) NOT NULL, `RIGHTARRY` varchar(255) NOT NULL, PRIMARY KEY (`key`) ) ENGINE=InnoDB AUTO_INCREMENT=262 DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of test -- ----------------------------
算法参考:http://www.iteye.com/problems/98441
————————————————————————————————————————————————————————————————————
简单多线程操作同一变量
package test; public class Test { private static int count = 1000; public synchronized static int add(){ return count--; } public static void main(String[] args){ for(int i=0;i<4;i++){ new Thread(){ public void run(){ while(true){ System.out.println(Thread.currentThread()+":"+add()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } } }