找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 1499|回复: 0

JAVA 私塾第十四、十五章笔记整理

[复制链接]
solimh 发表于 2011-2-26 11:17:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?快速注册

×
JAVA 私塾第十四、十五章笔记整理

第十四章 多线程

    线程的基本概念:
        线程是一个程序内部的顺序控制流。
        进程是正在执行的程序,一个或更多的线程构成了一个进程。

        线程和进程的区别:
    每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大。
    线程作为轻量级的进程,同一类线程可以共享代码和数据空间,但每个线程有独立的运行栈和数据空间,因此线程切换的开销小。
    多进程—在操作系统中同时运行多个任务(程序),也称多任务。
    多线程—在同一应用程序中多个顺序流同时执行。

    创建线程的2中方式:
      1.定义线程实现Runnable接口

  1. public class TestThread1 {
  2.    public static void main(String args[]) {
  3.       Runner1 r = new Runner1();
  4.       Thread t = new Thread(r);
  5.       t.start();
  6.       for(int i=0; i<100; i++) {
  7.          System.out.println("Main Thread:------" + i);
  8.       }
  9.    }
  10. }

  11. class Runner1 implements Runnable {
  12.    public void run() {
  13.       for(int i=0; i<100; i++) {
  14.          System.out.println("Runner1 :" + i);
  15.       }
  16.    }
  17. }
复制代码
2.定义一个Thread的子类,并重写其Run()方法

  1. public class TestThread1 {
  2.    public static void main(String args[]) {
  3.       Runner1 r = new Runner1();
  4.       r.start();
  5.       for(int i=0; i<100; i++) {
  6.          System.out.println("Main Thread:------" + i);
  7.       }
  8.    }
  9. }
  10. class Runner1 extends Thread {
  11.    public void run() {
  12.       for(int i=0; i<100; i++) {
  13.          System.out.println("Runner1 :" + i);
  14.       }
  15.    }
  16. }
复制代码
线程状态:
    【此处有图,可以到JAVA 私塾官网下载完整笔记:w ww.javass.cn】

线程控制基本方法:
方法             功能


isAlive() 判断线程是否还活着,即线程是否还未终止

getPriority() 获得线程的优先级数值

setPriority() 设置线程的优先级数值

Thread.sleep() 将当前线程睡眠,并指定毫秒数

join() 调用某线程的该方法,将当前线程与该线程“合并“,即等待该线程结束,再回复当前线程的运行。

wait() 当前线程进入对象的wait pool

notify()/notifyAll() 唤醒对象的wait pool中的一个/所有等待线程

    线程的优先级:

  1. public class TestPriority {
  2.    public static void main(String[] args) {
  3.       Thread t1 = new Thread(new T1());
  4.       Thread t2 = new Thread(new T2());
  5.       t1.setPriority(Thread.NORM_PRIORITY + 3);
  6.       t1.start();
  7.       t2.start();
  8.    }
  9. }

  10. class T1 implements Runnable {
  11.    public void run() {
  12.       for(int i=0; i<1000; i++) {
  13.          System.out.println("T1: " + i);
  14.       }
  15.    }
  16. }

  17. class T2 implements Runnable {
  18.    public void run() {
  19.       for(int i=0; i<1000; i++) {
  20.          System.out.println("------T2: " + i);
  21.       }
  22.    }
  23. }
复制代码
线程同步:
    当某个对象被用synchronized来修饰时,表明该对象某一时刻只能由一个线程访问。

  1. public class TestSync implements Runnable {
  2.    Timer timer = new Timer();
  3.    public static void main(String[] args) {
  4.       TestSync test = new TestSync();
  5.       Thread t1 = new Thread(test);
  6.       Thread t2 = new Thread(test);
  7.       t1.setName("t1");
  8.       t2.setName("t2");
  9.       t1.start();
  10.       t2.start();
  11.    }
  12.    public void run(){
  13.       timer.add(Thread.currentThread().getName());
  14.    }
  15. }

  16. class Timer{
  17.    ∵ static int num = 0;
  18.    public synchronized void add(String name){
  19.       synchronized (this) {
  20.          num ++;
  21.          try {Thread.sleep(1);}
  22.          catch (InterruptedException e) {}
  23.          System.out.println(name+", 你是第"+num+"个使用timer的线程");
  24.        }
  25.    }
  26. }
复制代码
死锁:

  1. public class TestDeadLock implements Runnable {
  2.    public int flag = 1;
  3.    static Object o1 = new Object(), o2 = new Object();
  4.    public void run() {
  5.       System.out.println("flag=" + flag);
  6.       if(flag == 1) {
  7.          synchronized(o1) {
  8.             try {
  9.                Thread.sleep(500);
  10.             }catch (Exception e) {
  11.                e.printStackTrace();
  12.             }
  13.             synchronized(o2) {
  14.                System.out.println("1");
  15.             }
  16.          }
  17.       }
  18.       if(flag == 0) {
  19.          synchronized(o2) {
  20.             try {
  21.                Thread.sleep(500);
  22.             } catch (Exception e) {
  23.                e.printStackTrace();
  24.             }
  25.             synchronized(o1) {
  26.                System.out.println("0");
  27.             }
  28.          }
  29.       }
  30.    }
  31.    public static void main(String[] args) {
  32.       TestDeadLock td1 = new TestDeadLock();
  33.       TestDeadLock td2 = new TestDeadLock();
  34.       td1.flag = 1;
  35.       td2.flag = 0;
  36.       Thread t1 = new Thread(td1);
  37.       Thread t2 = new Thread(td2);
  38.       t1.start();
  39.       t2.start();
  40.   
  41.    }
  42. }
复制代码
wait和sleep的区别
        wait时,别的线程可以访问锁定对象。
        sleep时,别的线程不可以访问锁定对象。

第十五章:网络编程

    什么是url?基本的格式是?
        URL(统一资源∵,Uniform Resource Locator)用于表示Internet 上资源的地址。这里所说的资源,可以是文件、目录或更为复杂的对象的引用。
        ht tp://home.netscape.com/home/welcome.html

    IP,Port,TCP的基本功能
        IP代表网络位置
        Port代表端口号
        TCP可保证不同厂家生产的计算机能在共同网络环境下运行,解决异构网通信问题,是 目前网络通信的基本协议

    Java网络模型的基本功能
        描述服务端和客户端的连接过程
        【此处有图,可以到JAVA 私塾官网下载完整笔记:w ww.javass.cn】

    Java网络编程究竟做些什么?如何做?
        1.建立连接
        2.准备输出的数据,流式输出
        3.流式输入,编程业务需要的格式
        4.关闭连接

    服务器分配一个端口号。如果客户请求一个连接,服务器使用accept()方法打开socket 连接。
    客户在host的port端口建立连接。
    服务器和客户使用InputStream和OutputStream进行通信。

    基于Socket编程

  1. import java.net.*;
  2. import java.io.*;

  3. public class TestServer {
  4.    public static void main(String args[]) {
  5.       try {
  6.          ServerSocket s = new ServerSocket(8888);
  7.          while (true) {
  8.             Socket s1 = s.accept();
  9.             OutputStream os = s1.getOutputStream();
  10.             DataOutputStream dos =
  11.             new DataOutputStream(os);
  12.             dos.writeUTF("Hello," +s1.getInetAddress() + "port#" +s1.getPort() + "\nb   ye!");
  13.             dos.close();
  14.             s1.close();
  15.          }
  16.       }catch (IOException e) {
  17.          System.out.println("程序运行出错:" + e);
  18.       }
  19.    }
  20. }
复制代码
TCP和UDP区别
        TCP能保证传输内容的完整和准确,UDP不能保证。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

快速回复 返回顶部 返回列表