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();
} }
java新手笔记33 多线程、客户端、服务器的更多相关文章
- java新手笔记34 连接数据库
1.JdbcUtil package com.yfs.javase.jdbc; import java.sql.Connection; import java.sql.DriverManager; i ...
- Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)
线程概述 在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行. 多线程可以使程序在同一时间内完成很多操作. 多线程就是指一个应用程序中有多条并发执行的线索,每条线索 ...
- java新手笔记10 构造器
1.摇奖小程序 package com.yfs.javase; import java.io.IOException; import java.nio.CharBuffer; import java. ...
- 【原】Java学习笔记032 - 多线程
package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * [进程]:正在 ...
- Java学习笔记之——多线程
多线程编程 程序: 进程:一个程序运行就会产生一个进程 线程:进程的执行流程,一个进程至少有一个线程,称为主线程 如:QQ聊着天,同时在听音乐 一个进程可以有多个线程,多个线程共享同一个进程的资源 线 ...
- Java学习笔记:多线程(一)
Java中线程的五种状态: 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked) 凋亡状态(Dead) 其中阻塞状态(Blocked)又分为三种: ...
- JAVA复习笔记之多线程并发
前言:多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,还是值得深入研究一下 概念: 1 线程:进程中负责程序执行的执行单元线程本身依靠程序进行运行线程是程序中的顺序控制流,只能使用 ...
- java学习笔记(5)多线程
一.简介(过段时间再写,多线程难度有点大) --------------------------------------- 1.进程:运行时的概念,运行的应用程序 2.线程:应用程序内部并发执行的代码 ...
- Java 学习笔记(11)——多线程
Java内部提供了针对多线程的支持,线程是CPU执行的最小单位,在多核CPU中使用多线程,能够做到多个任务并行执行,提高效率. 使用多线程的方法 创建Thread类的子类,并重写run方法,在需要启动 ...
随机推荐
- MyBatis之四:调用存储过程含分页、输入输出参数
在前面分别讲解了通过mybatis执行简单的增删改,多表联合查询,那么自然不能缺少存储过程调用,而且还带分页功能. 注意:表结构参见上篇讲解联合查询的表. 一.查询某班级以及该班级下面所有学生的记录 ...
- TreeView节点拖拉操作1
TreeView节点拖拉操作1 //事先设置 TreeView1.DragMode= dmAutomatic; unit Unit1; interface uses Windows, Me ...
- 转:打造DropDownList,TreeView,ListBox无限极分类目录树
[csharp] view plaincopyprint? #region DropDownList无限递归显示层次关系 /// <summary> /// 创建无限分级下拉列表框 /// ...
- DataBase 之 实用积累
(1)分页:(性能效果最好的是top/max 和Row_number()两种方法) [1]写法1,not in/top select top pagesize * from pagetest wher ...
- Count Color
Description Chosen Problem Solving and Program design as an optional course, you are required to sol ...
- Java用筛子法求素数
描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数,则输出左侧的值及相应距离.如果输入的整数本身就是素数,则输出该素数本身,距离输出0 ...
- Header 与 Footer 的 DIV 高度固定, 中间内容 DIV高度自适应,内容不满一页时,默认填满屏幕。
一.需求: 页面布局分三大块: Header Body Footer 1.内容不满一页时,Footer 在屏幕最底部,Body 填充满 Header 与 Footer 中间的部分. 2.当缩小浏览器时 ...
- javaEE的十三个技术规范
java 是一种非常棒的语言,健壮,跨平台运行,屏蔽了具体的平台环境的要求,也就是说只要支持java 虚拟机,就可以运行java程序. 下面,我们一起学习一下J2EE的十三种技术规范. 一.JDBC: ...
- 向MyEclipse添加Oracle数据库
向MyEclipse添加Oracle数据库 1.点击下面圈起来的位置,打开MyEclipse database Explorer视图. 2.在如图空白处右击,选择new进入New Database C ...
- CF Tavas and Karafs (二分)
Tavas and Karafs time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...