第九节:详细讲解Java中的泛型,多线程,网络编程
前言
大家好,给大家带来详细讲解Java中的泛型,多线程,网络编程
的概述,希望你们喜欢
泛型
泛型格式:ArrayList list= new ArrayList();
ArrayList list= new ArrayList<>();
Type可以为类,接口
使用泛型可以使加入的,不用被强制
通配符
ArrayList<? extends Type> list= new ArrayList<>();
代表任意泛型
多线程
在同一时间,做多件事情.
创建线程的方法
继承类Thread并重写run(),run()称为线程体;用这种方法定义的类不能再继承其他类。
class FirstThread extends Thread{
public void run(){
for(int i=0;i<100;i++){
System.out.println("FirstThread"+i);
}
}
}
class Test{
public static void main(Sting args[]){
FirstThread ft = new FirstThread();
ft.start();
for(int i = 0; i<100;i++){
System.out.println("main"+i):
}
}
}
接口Runnable的类作为线程的目标对象
class Test implements Runnable{
public void run(){
for(int i = 0;i<100;i++){
System.out.println("Runnable"+i);
}
}
}
class Test{
public static void main(String args[]){
Test test = new Test();
Thread t = new Thread(test);
System.out.println(t.getPriority());
t.start();
}
}
中断线程
Thread.sleep();
Thread.yield();//让出自己正在使用的CPU
设置线程的优先级
getPriority();
setPriority();
class Test implements Runnable{
public void run(){
for(int i = 0;i<100;i++){
System.out.println("Runnable"+i);
if(i==50){
try{
Thread.sleep(2000);
}
catch(Exception e){
System.out.println(e);
}
}
}
}
}
class Test{
public static void main(String args[]){
RunnableImp1 ri = new RunnableImp1();
Thread t = new Thread(ri);
t.setPriority(Thread.MAX_PRIORITY);
//t.setPriority(Thread.MIN_PRIORITY);
t.start();
System.out.println(t.getPriority());
}
}
class Test{
public static void main(String args[]){
MyThread myThread = new MyThread();
Thread t1 = new Thread(myThread);
Thread t2 = new Thread(myThread);
t1.setName("线程1");
t2.setName("线程2");
//分别启动
t1.start();
t2.start();
}
}
class MyThread implements Runnable{
int i = 100;
public void run(){
while(true){
System.out.println(Thread.currentThread().getName()+i);
i--;
Thread.yield();
if(i<0){
break;
}
}
}
}
//同步代码块
class MyThread implements Runnable{
int i = 100;
public void run(){
while(true){
synchronized(this){
System.out.println(Thread.currentThread().getName()+i);
i--;
Thread.yield();
if(i<0){
break;
}
}
}
}
}
深入synchronized关键字
class Service{
public void fun1(){
synchronized(this){
try{
Thread.sleep(3*1000);
}
catch(Exception e){
System.out.println("fun1");
}
}
public void fun2(){
synchronized(this){
System.out.println("fun2");
}
}
}
class MyThread1 implements Runnable{
private Service service;
public MyThread1(Service service){
this.service = service;
}
public void run(){
service.fun1();
}
}
class MyThread2 implements Runable{
private Service service;
public MyThread2(Service service){
this.service = service;
}
public void run(){
service.fun2();
}
}
class Test{
public static void main(String args[]){
Service service = new Service();
Thread t1=new Thread(new MyThread1(service));
Thread t2=new Thread(new MyThread2(service));
t1.start();
t2.start();
}
}
同步锁 锁住的是service
同步方法,同步代码块锁住this
class Service{
public synchronized void fun1(){
try{
Thread.sleep(3*1000);
}
catch(Exception e){
System.out.println(e);
}
System.out.println("fun1");
}
public void fun2(){
synchronized(this){
System.out.println("fun2");
}
}
}
数组
class Test{
public static void main(String args[]){
//数组的静态声明
int arr [] = {5,2,7,8,9,0};
arr[3] = 10;
//System.out.println(arr[3]);
for(int i = 0;i<5;i++){
System.out.println(arr[i]);
}
}
}
class Test{
public static void main(String args[]){
int arr[] = {2,4,6,7,8};
System.out.println(arr.length);
}
}
数组的动态声明
class Test{
public static void main(String args[]){
//动态声明
int arr [] = new int [10];
System.out.println("arr数组长度"+arr.length);
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
二维数组
class Test{
public static void main(String args[]){
//二维数组的定义方法,长度为3
int arr [][] = {{1,2,3},{4,5,6},{7,8,9}};
System.out.println(arr[1][1]);
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
System.out.println(arr[i][j]);
}
}
}
}
优化
class Test{
public static void main(String args[]){
//二维数组的定义方法,长度为3
int arr [][] = {{1,2,3},{4,5,6},{7,8}};
System.out.println(arr[1][1]);
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.println(arr[i][j]);
}
}
}
}
动态
class Test{
public static void main(String args[]){
//int arr [][] = {{1,2,3},{4,5,6},{7,8}};
int arr [][] = new int[3][5];
System.out.println(arr[1][1]);
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.println(arr[i][j]);
}
}
}
}
线程概念
进程:就是执行一个任务;
线程:就是在进程内部同时做的事情。
网络开发Socket和ServerSocket
Socket为“孔”或“插座”,创建Socket,打开连接Socket的输入或输出流,对Socket进行读写,关闭Socket。
Accept方法用于产生“阻塞”,这里有getInputStream方法和getOutInputStream方法,会产生一个IOException,
在Java.net包中,有Socket和ServerSocket两个类。以JDK1.6介绍:
public Socket()
public Socket(String host, int port)
//host - 主机名,或者为 null,表示回送地址
//port - 端口号
public Socket(InetAddress address,int port)
//address - IP 地址
//port - 端口号
ServerSocket(int port)
ServerSocket(int port,int backlog)
ServerSocket(int port,int backlog,InetAddress binAddr)
服务器与客户端通信
package two;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocket1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(2007);
while(true) {
Socket s = ss.accept();
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.println("helloworld, i am server thinkpad");
DataInputStream dis = new DataInputStream(is);
String str = dis.readLine();
System.out.println(str);
s.close();
}
}
catch(IOException ee) {
System.out.println(ee);
}
catch(Exception e) {
System.out.println(e);
}
}
}
package two;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ConnectException;
import java.net.Socket;
public class ClientSocket {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Socket s = new Socket("########",2007);
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.println("hello , i am client");
DataInputStream dis = new DataInputStream(is);
String str = dis.readLine();
System.out.println(str);
s.close();
}
catch(ConnectException eee) {
System.out.println(eee);
}
catch(IOException ee) {
System.out.println(ee);
}
catch(Exception e) {
System.out.println(e);
}
}
}
总结
- 本文讲了详细讲解Java中的泛型,多线程,网络编程,如果您还有更好地理解,欢迎沟通
- 定位:分享
Android
&Java
知识点,有兴趣可以继续关注
第九节:详细讲解Java中的泛型,多线程,网络编程的更多相关文章
- 第五节:详细讲解Java中的接口与继承
前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...
- 第四节:详细讲解Java中的类和面向对象思想
前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...
- 第七节:详细讲解Java中的日期,java.util.date
前言 大家好,给大家带来详细讲解Java中的日期,java.util.date的概述,希望你们喜欢 类Date Java.lang.Object->java.util.Date public c ...
- 第六节:详细讲解Java中的装箱与拆箱及其字符串
前言 大家好,给大家带来详细讲解Java中的装箱与拆箱及其字符串的概述,希望你们喜欢 装箱与拆箱 封装类有:Byte , short , Integer , Character , long , Fl ...
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...
- Java中基于HTTP协议网络编程
java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来訪问Web服务功能,这篇博客,就跟大家分享一下.Java中的网络编程的知识.主要是学习下该java.net包下的API. U ...
- 【转】详细讲解Java中log4j的使用方法
转载地址:http://www.233.com/Java/zhuangye/20070731/142625631.html 1.Log4j是什么? Log4j可以帮助调试(有时候debug是发挥不了作 ...
- 详细讲解JAVA中的IO流
一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. ...
- 详细讲解Java中方法的重载和重写
首先讲讲方法的重载: Java的重载就是在类中可以创建多个方法,它们具有相同的名字,但是却有不同的参数. 判断是否重载只有两个条件: 1)相同的方法名 2)不同的参数 具体为: A.方法参数类型不同 ...
随机推荐
- 6.Python enumerate 特性
enumerate()可参考: list1 = ["这", "是", "一个", "测试"] for index,ite ...
- 转: rem与px的转换
rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个参考值,这个参考值设置为多少,完全可以根据您自己的需求来定.· 我们知道,浏览器默认的字号16px,来看一些px单 ...
- SQL 读取csv 文件批量插入数据
use test /* create table temp_pre ( vc_product_id varchar(20) default '', en_in_amount numeric(9,2)d ...
- 作业注释 CSS表单1 输入框前有图片
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Apache 修改端口号
默认是80端口,可在httpd.conf文件中修改以下2个地方的端口号为预定的即可,例如修改为8080端口 把httpd.conf 中Listen 80 改成Listen 8080 把ServerNa ...
- db2 SQL6036N解决办法
问题背景: 数据库在进行大量的运算和数据处理的过程中,IO.CPU等资源消耗非常高的时候,强制停止数据库.db2stop force 结果数据库命令迟迟没有响应.这个时候对数据库进行其他操作均无响应, ...
- 【转载】一个小时学会MySQL数据库
一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数 ...
- SD
Offer(Tcode:VA23;Table: vbak and vbap) billing(Tcode:VF03;Table:vbrk and vbrp) Offer(quotation)-> ...
- 新建一个项目,如何使用abp用户登录系统
1.首先参考Framework.Web里的packages.config,把相关的包都安装好. 2.App_Start文件夹下的xxxModule.cs和Startup.cs拷过来,修改下命名空间. ...
- CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org ***”
执行yum命令时出现以上错误; 解决方法: vi /etc/sysconfig/network-scripts/ifcfg-eth0 这一段为你的网卡修改图中框框部分 然后重启 :reboot