java---1
最近在做一个小玩意,要用到多线程,java小项目,就像是坦克大战规模大小的小玩意。话说虽然这种小东西不起眼,但是自己动手做一遍,总归是对面向对象和多线程操作有了一个系统的认识嘛。。四不四?在这里打算记一下学习的多线程梗概。
话说过几周要考操作系统嘛,复习一波线程和进程,一个线程是进程中的执行流程,一个进程中可以同时包括多个线程,每个线程可以得到一段执行自己程序的时间,有一个包含的关系,这样一个进程就可以具有多个并发执行的过程。由此考虑到,如果有一个进程需要许多段代码的操作,就需要产生多线程。
windows系统是多任务操作系统,它可以以进程为单位来分布,一个进程是包含地址的程序。系统执行进程的方式是一个接一个进行的,个人感觉有那么多进程同时存在是因为现在CPU转换速度太快。。不是系统的锅。。而线程则是可以并发进行的,因为对于一个完整的进程也就是程序来说,很可能是需要多个线程同时完成各自功能。虽然多线程看起来像是同时执行,但事实上在同一时间点上只有一个线程被执行,只是线程之间切换比较快,所以才会产生线程是同时进行的假象。
在java中,多线程是非常重要的一部分,大致上有两种方式进行线程的实现。
一种为继承Thread类,这个类中实例化的对象代表线程,完成线程的功能代码放在类的run()方法内,如果一个类继承了Thread类,那么就可以覆盖run()方法,然后调用start()方法实现功能。当执行一个线程程序时,就会产生一个线程,main在此线程上运行,main线程启动是虚拟机的任务,我们的任务是搞定自己写的线程。
new Threadtest().start();
另一种是实现Runnable接口,实质上,第一种方法就是Thread实现了Runnable接口。实现Runnable接口的程序会创建一个Thread对象,实际顺序就是先创建一个Runnable对象,根据这个对象再创建Thread对象,然后调用start()方法启动线程。
private static Thread a; a=new Thread(new Runnable(){ public void run(){ /*................... ...................*/ } }); a.start();
当然,在main中实例化还是必不可少的。。
在我们上机题目中让实现线程间同步控制,同时实现线程通信。同步机制是为了防止资源冲突,即是给定时间只允许一个线程访问共享资源。同步机制使用synchronized关键字。通常将共享资源的操作放置在synchronized定义的区域内,这样当其他线程也获取到这个锁时,必须等待锁被释放才能进入该区域。
同步方法就是在方法前面修饰synchronized关键字的方法,其语法如下:
synchronized void doit(){}
同步方法和同步块运行没什么差别。。更习惯同步方法吧。。通常情况下,因为调度方式的关系,不同线程按顺序执行的,这样,同步机制,互斥量等就有了意义。