5. java编程思想读书笔记(四)

来源:互联网 发布:淘宝联盟怎么省钱 编辑:程序博客网 时间:2024/05/30 02:22

1、java的多线程和其他的语言有明显的不同,多线程的类是采用一个继承的方法。

 1 import java.io.File; 2 import java.lang.reflect.Constructor; 3 import java.util.*; 4  5 class MyThread extends Thread{ 6       public  void run(){ 7            System.out.println("This is Hellow world from thread"); 8       } 9 }10 public class HellowWorld {11 12     public  static void main(String[] args){13         MyThread mt = new MyThread();14         mt.start();15     }16 }

输出会显示“This is Hellow world from thread”。

如果想把一个函数或者代码段进行枷锁就要用到synchronized,

上面的函数可以写成

1 class MyThread extends Thread{2       public synchronized void run(){3            System.out.println("This is Hellow world from thread");4       }5 }

或者

1 class MyThread extends Thread{2       public void run(){3           synchronized (this){4               System.out.println("This is Hellow world from thread");5           }6       }7 }

线程发生阻塞会有一下场景:

(1) 调用sleep(毫秒数),使线程进入“睡眠”状态。在规定的时间内,这个线程是不会运行的。
(2) 用suspend()暂停了线程的执行。除非线程收到resume()消息,否则不会返回“可运行”状态。
(3) 用wait()暂停了线程的执行。除非线程收到nofify()或者notifyAll()消息,否则不会变成“可运行”
(是的,这看起来同原因2非常相象,但有一个明显的区别是我们马上要揭示的)。
(4) 线程正在等候一些IO(输入输出)操作完成。
(5) 线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。

其中wait也可以加一个时间,等时间过了以后如果还没有收到notify消息,则继续运行。

2、java的socket通信

java的socket通信的服务器类不需要知道具体的IP地址,仅仅需要设置一个端口号就可以了。

ServerSocket s = new ServerSocket(PORT); //建立一个socket类Socket socket = s.accept(); //获取一个socket连接BufferedReader in =    new BufferedReader(        new InputStreamReader(            socket.getInputStream()));//获取socket的数据流PrintWriter out =    new PrintWriter(        new BufferedWriter(            new OutputStreamWriter(                socket.getOutputStream())), true);//写入数据流String str = in.readLine(); //读数据out.println(str);                //发数据

不过当然了,客户端肯定是需要Ip地址了

1         InetAddress addr =2                 InetAddress.getByName(null);3 4         Socket socket =5                 new Socket(addr,8080);

读取数据和服务器端是一样的,这里就不赘述了。

3、连接数据库

JDBC Java数据库连接的缩写

连接一个数据库需要三方面的内容

(1) 用“jdbc”指出要使用JDBC。
(2) “子协议”:驱动程序的名字或者一种数据库连接机制的名称。由于JDBC的设计从ODBC吸收了许多灵
感,所以可以选用的第一种子协议就是“jdbc-odbc桥”,它用“odbc”关键字即可指定。
(3) 数据库标识符:随使用的数据库驱动程序的不同而变化,但一般都提供了一个比较符合逻辑的名称,由
数据库管理软件映射(对应)到保存了数据表的一个物理目录。为使自己的数据库标识符具有任何含义,必
须用自己的数据库管理软件为自己喜欢的名字注册(注册的具体过程又随运行平台的不同而变化)。
所有这些信息都统一编译到一个字串里,即“数据库URL”。举个例子来说,若想通过ODBC子协议同一个标

识为“people”的数据库连接,相应的数据库URL可设为:
String dbUrl = "jdbc:odbc:people"

如果通过一个网络连接,数据库URL也需要包含对远程机器进行标识的信息。
准备好同数据库连接后,可调用静态方法DriverManager.getConnection(),将数据库的URL以及进入那个
数据库所需的用户名密码传递给它。得到的返回结果是一个Connection对象,利用它即可查询和操纵数据
库。

 1 class Lookup { 2     public static void main(String[] args) { 3         String dbUrl = "jdbc:odbc:people"; 4         String user = ""; 5         String password = ""; 6         try { 7             // Load the driver (registers itself) 8             Class.forName( 9                     "sun.jdbc.odbc.JdbcOdbcDriver");10             Connection c = DriverManager.getConnection(11                     dbUrl, user, password);12             Statement s = c.createStatement();13             // SQL code:14             ResultSet r =15                     s.executeQuery(16                             "SELECT FIRST, LAST, EMAIL " +17                                     "FROM people.csv people " +18                                     "WHERE " +19                                     "(LAST='" + args[0] + "') " +20                                     " AND (EMAIL Is Not Null) " +21                                     "ORDER BY FIRST");22             while(r.next()) {23                 // Capitalization doesn't matter:24                 System.out.println(25                         r.getString("Last") + ", "26                                 + r.getString("fIRST")27                                 + ": " + r.getString("EMAIL") );28             }29             s.close(); // Also closes ResultSet30         } catch(Exception e) {31             e.printStackTrace();32         }33     }34 } ///:~

这个操作的流程基本上和C#差不多,不过好像比C#要简单一些。

原创粉丝点击