Java学习笔记(六)
二十、多线程
在Java中要想实现多线程代码有两种手段:
一种是继承Thread类:
Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类。在Thread子类之中,必须明确的覆写Thread类中的run()方法,此方法为线程的主体。如果要想正确的启动线程,是不能直接调用run()方法的,应该调用从Thread类中继承而来的start()方法,才可以启动线程。
另一种就是实现Runnable接口
在Java中也可以通过实现Runnable接口的方式实现多线程,Runnable接口中只定义了一个抽象方法:public void run() ;所以一定要覆写run()方法。此时,还是要依靠Thread类完成启动,在Thread类中提供了以下的两个构造方法:
public Thread(Runnable target)
public Thread(Runnable target,String name)
Thread类和Runnable接口的区别:继承Thread的类不适合于多个线程共享资源,而实现Runnable的类则可以方便的实现资源的共享
线程的休眠:
在程序中允许一个线程进行暂时的休眠,直接使用Thread.sleep()方法即可
线程同步:
所谓的同步就是指多个操作在同一个时间段内只能有一个线程进行,其他线程要等待此线程完成之后才可以继续执行。
同步代码块:
在代码块上加上“synchronized”关键字的话,则此代码块就称为同步代码块。
同步代码块格式:
synchronized(同步对象){
需要同步的代码 ;
}
同步方法:
可以使用synchronized关键字将一个方法声明成同步方法。
同步方法定义格式:
synchronized 方法返回值 方法名称(参数列表){}
二十一、网络编程(java.net.*)
端口号是一个标记机器的逻辑通信信道的正整数,端口号不是物理实体。IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的最后终结点。
端口号是用一个16位的整数来表达的,其范围为0~65535,其中0~1023为系统所保留。因此,当我们编写通信程序时,应选择一个大于1023的数作为端口号,以免发生冲突。
Socket通信:
在Java中,基于TCP协议实现网络通信的类有两个:在客户端的Socket类和在服务器端的ServerSocket类。
在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket实例。
在客户端通过规定一个主机和端口号创建一个 socket实例,连到服务器上。
ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求。
支持多线程:
不同的处理线程为不同的客户端服务,主线程只负责循环等待,处理线程负责网络连接,接受客户端输入的信息
二十二、JDBC(基本操作:插查删改、连接数据库)
主要的代码如下
importjava.sql.DriverManager;
importjava.sql.SQLException;
importcom.mysql.jdbc.Connection;
importcom.mysql.jdbc.ResultSet;
importcom.mysql.jdbc.Statement;
//基本代码
private staticfinal StringURL="jdbc:mysql://localhost:3306/petshop?useUnicode=true&characterEncoding=UTF-8";
private staticfinal String NAME="root";
private staticfinal String PASSWORD="123456 ";
publicConnection conn =null;
//1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptione) {
System.out.println("未能成功加载驱动程序,请检查是否导入驱动程序!");
e.printStackTrace();
}
try {
conn= (Connection)DriverManager.getConnection(URL, NAME, PASSWORD);
System.out.println("获取数据库连接成功!");
} catch (SQLException e) {
// TODO: handleexception
System.out.println("获取数据库连接失败!");
e.printStackTrace();
}
//添加insert语句
Statementstatement=null;
String sql="INSERTINTO pet(kind,name,color,age)"+"VALUES('cat','"+information[0]+"','"+information[1]+"',"+Integer.parseInt(information[2])+")";
//System.out.println(sql);
try {
statement=(Statement)conn.createStatement();
} catch (SQLException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
try {
statement.executeUpdate(sql);
} catch (SQLException e1) {
// TODOAuto-generated catch block
e1.printStackTrace();
}
try {
statement.close();
} catch (SQLException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
//查询select操作
sql="SELECT* FROM pet WHERE age="+Integer.parseInt(information[2]);
ResultSetresultset=null;
statement=(Statement)conn.createStatement();
resultset=(ResultSet)statement.executeQuery(sql);
resultset.close();
statement.close();
//更新Update操作
sql="UPDATEpet SET age="+Integer.parseInt(information[2])+" WHEREid="+infor_id;
statement=(Statement)conn.createStatement();
statement.executeUpdate(sql);
statement.close();
//删除Delete操作
sql="DELETEFROM pet WHERE age="+Integer.parseInt(information[2]);
statement=(Statement)conn.createStatement();
statement.executeUpdate(sql);
statement.close();
//最后
conn.close()
上一篇: keil中快速注释一段代码