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

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 ResultSet
30         } catch(Exception e) {
31             e.printStackTrace();
32         }
33     }
34 } ///:~

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

原文地址:https://www.cnblogs.com/HighFun/p/2778263.html