您的位置:首页 > 编程语言 > Java开发

java简单小结(附一个java实现的生产者消费者问题的程序)

2011-12-23 14:57 716 查看
最近为了完成开发一个后台通过串口接收网络拓扑和传感数据,并显示网络拓扑和收到的数据的任务,又重新回顾下java。大学时代曾经学过这么课程。现在基本的任务完成了,来做一个自己关于java方面的一些总结吧。

1:java虚拟机。首先要理解java虚拟机。Java虚拟机是编译和运行Java程序等的各种命令及其运行环境的总称,这是比较正规的定义。我们可以把Java虚拟机理解为在操作系统提供的系统调用的基础上,有一个包围操作系统的层次,就是java虚拟计算机,简称java虚拟机,我们的java程序就是在这个层次之上的,不和操作系统有任何关系。

2:变量。这个是编程语言的核心概念。Java的类也可以理解为一种广义上的变量。

3:面向对象的编程。这个也不说了。

4:文件与数据流。与C语言的输入输出相比,JAVA的输入输出从使用上来说,相对简单点。C语言采用文件指针,操作系统采用文件描述符,JAVA采用输出输出类。InputStream,
OutputStream, Reader, Writer以及继承自这几个抽象类的一些子类。FileInputStream, BufferedInputStream,DataInputStream, InputReader, BufferedInputReader等等。其中Reader,Writer系列处理文本文件较方便。InputStream,
OutputStream系列处理字节流。 串口的读取也是转换成这些类。

5:异常处理。让程序在运行时,能够动态的捕捉到出现异常的情况,利于程序的调试维护和运行时的出错处理能力。

6:多线程。Java的多线程编程,通过类的同步函数和同步语句块来实现加锁机制和线程的交互协作。Synchronized , wait, notify, 对象等候集等概念。

7:网络套接字方面。基本的URL类。TCP,UDP,套接字编程。

8:图形界面。容器,组件,事件对象,事件监听器,事件处理等。

下面附上一点程序。

第一个程序:是用JAVA实现的一个生产者消费者问题。

程序有三个线程。主线程ProviderConsumer,生产者线程Provider,消费者线程Consumer。然后他们共同拥有一个在堆上的全局共有对象m_data。当然这个程序只是一个抽象的例子,实际做的是一个线程从串口读取网络拓扑和传感数据,另外一个线程实时的在屏幕上更新显示拓扑图和传感数据。

class ExpData

{

/**

* @param args

*/

public boolean m_ready=false;

public int m_pressure;

public synchronized void mb_update(int data)

{

if(m_ready==true)

{

System.out.println("等待数据消费之后才可以更新...");

try

{

wait();

}

catch(Exception e)

{

e.printStackTrace();

System.err.println(e);

}

}

m_pressure=data;

System.out.println("压力数据"+m_pressure+"更新成功");

m_ready=true;

notify();

}

public synchronized void mb_analyze()

{

if(m_ready==false)

{

System.out.println("等待数据更新之后才可以消费...");

try

{

wait();

}

catch(Exception e)

{

e.printStackTrace();

System.err.println(e);

}

}

System.out.println("压力数据"+m_pressure+"成功得到分析");

m_ready=false;

notify();

}

}

class Provider extends Thread

{

public ExpData m_data;

public Provider(ExpData data)

{

m_data=data;

}

public void run()

{

System.out.println("生产者线程开始工作");

for(int i=0;i<3;i++)

{

m_data.mb_update(10);

}

System.out.println("生产者线程工作完成");

}

}

class Consumer extends Thread

{

public ExpData m_data;

public Consumer(ExpData data)

{

m_data=data;

}

public void run()

{

System.out.println("消费者线程开始工作");

for(int i=0;i<3;i++)

{

m_data.mb_analyze();

}

System.out.println("消费者线程工作完成");

}

}

public class ProviderConsumer

{

/**

* @param args

*/

public static void main(String[] args)

{

// TODO Auto-generated method stub

ExpData m_data= new ExpData();//生存者和消费者共同处理的数据

Provider provider=new Provider(m_data);

Consumer consumer=new Consumer(m_data);

consumer.start();

provider.start();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: