java新手笔记33 多线程、客户端、服务器

1.Mouse

package com.yfs.javase;

public class Mouse {
	
	private int index = 1;
	private boolean isLive = false;
	//跳出方法  同步锁
	public synchronized void jump() {
		while(true) {
			if(!isLive ) {
				System.out.println("跳出第 " + index + " 田鼠");
				//修改田鼠状态
				isLive = true;
				//通知打的线程
				//notify();				
			} else {
				//当前线程等待
//				try {
//					wait();
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				}
			}
		}
	}
	public synchronized void hit() {
		while(true) {
			if(isLive) {
				System.out.println("打掉第 " + index + " 田鼠..");
				index ++;
				isLive = false;
				//notify();//通知放田鼠的线程
			} else {
//				try {
//					//wait();
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				}
			}
		}
	}

}

 2.Producer

package com.yfs.javase;

public class Producer extends Thread {
	private Mouse mouse;
	
	public Producer(Mouse  mouse) {
		this.mouse = mouse;
	}
	
	@Override
	public void run() {
		mouse.jump();
	}

}

 3.Customer

package com.yfs.javase;

public class Customer extends Thread {
	private Mouse mouse;
	public Customer(Mouse mouse) {
		this.mouse = mouse;
	}
	
	@Override
	public void run() {
		mouse.hit();
	}
	

}

 4.MouseTest

package com.yfs.javase;

public class MouseTest {

	public static void main(String[] args) {
		Mouse mouse = new Mouse();
		new Producer(mouse).start();
		new Customer(mouse).start();
	}

}

 5.Ticket

package com.yfs.javase;

public class Ticket implements Runnable {
	private int index = 100;//共享资源

	//锁机制
	@Override
	public void run() {
		
		while(index > 0) {
			synchronized (this) {//同步锁  当前对象
				try {
					Thread.sleep(3);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				if(index <= 0) { 
					break;
				}
				System.out.println(Thread.currentThread().getName() + "  第  " + index  +  "  票售出");
				index --;
			}
			
		}
		
	}

}

 6.TicketTest

package com.yfs.javase;

public class TicketTest {

	public static void main(String[] args) {
		Ticket tickets = new Ticket();
		new Thread(tickets,"1号").start();
		new Thread(tickets,"2号").start();
		new Thread(tickets,"3号").start();
		new Thread(tickets,"4号").start();

	}

}

 7.IP 地址/主机名称

package com.yfs.javase.net;

import java.net.InetAddress;

public class AddressDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		InetAddress add1 = InetAddress.getLocalHost();
		System.out.println("IP 地址 :" + add1.getHostAddress());
		System.out.println("主机名称 :" + add1.getHostName());
		
		InetAddress add2 = InetAddress.getByName("www.baidu.com");
		System.out.println("IP 地址 :" + add2.getHostAddress());
		System.out.println("主机名称 :" + add2.getHostName());
		

	}

}

 8.Server1

package com.yfs.javase.net;

import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server1 {

	/**
	 * 启动服务 监听端口
	 */
	public static void main(String[] args) throws Exception {
		ServerSocket server = new ServerSocket(3000);
		//启动
		System.out.println("服务器启动,监听3000端口...");
		Socket socket = server.accept();//监听是否有其他主机连接
        String other = socket.getInetAddress().getHostAddress();
		System.out.println(other + "请求连接...");
		
		//发送信息   获取输出流
		OutputStream out = socket.getOutputStream();
		out.write('a');
		out.flush();//刷新
		out.close();
		System.out.println("信息发送完成");
		
		
		
		
	}

}

 9.Client1

package com.yfs.javase.net;

import java.io.InputStream;
import java.net.Socket;

public class Client1 {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("192.168.1.30", 3000);
        //接收信息
        InputStream in = socket.getInputStream();
        int val = in.read();
        System.out.println("val = " + (char)val);
        in.close();
    }

}

 10.Server2

package com.yfs.javase.net;

import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {

	/**
	 * 启动服务 监听端口
	 */
	public static void main(String[] args) throws Exception {
		ServerSocket server = new ServerSocket(3000);
		//启动
		System.out.println("服务器启动,监听3000端口...");
		Socket socket = server.accept();//监听是否有其他主机连接
        String other = socket.getInetAddress().getHostAddress();
		System.out.println(other + "请求连接...");
		
		//发送信息   获取输出流
		OutputStream out = socket.getOutputStream();
		BufferedOutputStream buf = new BufferedOutputStream(out);
		PrintWriter pw = new PrintWriter(new OutputStreamWriter(buf));
	    pw.println("同学们,你们好! 这是服务器发送的信息....");
	    pw.close();
	    buf.close();
		out.close();
		System.out.println("信息发送完成");
	}

}

 11.Client2

package com.yfs.javase.net;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		Socket socket = new Socket("192.168.1.30", 3000);
		//接收信息
		InputStream in = socket.getInputStream();
		BufferedReader read = new BufferedReader(new InputStreamReader(in));
		String msg = read.readLine();
		System.out.println("服务器说:" + msg);
		read.close();
		in.close();
	}

}

 12.Server3

package com.yfs.javase.net;

import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server3 {

	/**
	 * 启动服务 监听端口
	 */
	public static void main(String[] args) throws Exception {
		ServerSocket server = new ServerSocket(3000);
		//启动
		System.out.println("服务器启动,监听3000端口...");
		Socket socket = server.accept();//监听是否有其他主机连接
        String other = socket.getInetAddress().getHostAddress();
		System.out.println(other + "请求连接...");
		
		//发送信息   获取输出流
		OutputStream out = socket.getOutputStream();
		BufferedOutputStream buf = new BufferedOutputStream(out);
		PrintWriter pw = new PrintWriter(new OutputStreamWriter(buf));
	    pw.println("同学们,你们好! 这是服务器发送的信息....");
	    pw.flush();
	    Scanner scan = new Scanner(System.in);
	    String msg = null;
	    int i = 1;
	    while(i < 3000) {
	    	msg = scan.next();
	    	pw.println(msg);
	    	pw.flush();
	    	i++;
	    }
	    pw.close();
	    buf.close();
		out.close();
		System.out.println("信息发送完成");
	}

}

 13.Client3

package com.yfs.javase.net;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		Socket socket = new Socket("192.168.1.30", 3000);
		//接收信息
		InputStream in = socket.getInputStream();
		BufferedReader read = new BufferedReader(new InputStreamReader(in));
		String msg = read.readLine();
		System.out.println("服务器说:" + msg);
		int i = 1;
		while(i < 3000) {
			msg = read.readLine();
			System.out.println("服务器说:" + msg);
			i++;
		}		
		read.close();
		in.close();
	}

}
原文地址:https://www.cnblogs.com/feilongblog/p/4758935.html