zoukankan      html  css  js  c++  java
  • 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#要简单一些。

  • 相关阅读:
    AIO5岗位桌面主页【我的收藏夹】只显示8行,怎样增加显示行?
    已设置了参考编号的编码规则定义,但是新增单据的时候,没有出来自动编号是什么原因?
    10个TWaver 网页3D可视化精彩案例
    HTML5大数据可视化效果(二)可交互地铁线路图
    无插件纯web 3D机房 (第四季:大型园区、地球仪效果和其他扩展应用)
    一款基于HTML5的Web 3D开发工具
    Legolas工业自动化平台入门(三)交互事件响应动作
    Legolas工业自动化平台入门(二)数据响应动作
    Legolas工业自动化平台入门(一)搭建应用
    Legolas工业自动化平台案例 —— 水源地自动化监控系统
  • 原文地址:https://www.cnblogs.com/HighFun/p/2778263.html
Copyright © 2011-2022 走看看