第九周学习总结&实验报告七

实验报告:

实验任务详情:

完成火车站售票程序的模拟。

要求:

(1)总票数1000张;

(2)10个窗口同时开始卖票;

(3)卖票过程延时1秒钟;

(4)不能出现一票多卖或卖出负数号票的情况。

实验代码:

package Java11;
	class MyThread implements Runnable{
	        private int ticket = 1000;
	        
	        public void run() {
	            for(int i = 0; i < 1000; i++) {
	                   this.sale();
	                   if(i == Math.sqrt(i) * Math.sqrt(i)) {
	                       Thread.currentThread().yield();
	                   }
	                }
	            }
	        
	         public synchronized void sale() {
	                if(ticket > 0) {
	                    try {
	                        Thread.currentThread().sleep(1000);
	                    }catch(InterruptedException e) {
	                        e.printStackTrace();
	                    }
	                    System.out.println(Thread.currentThread().getName()+"卖票:ticket="+ticket--);
	                }
	         }
	}
package Java11;

public class 测试类 {

	public static void main (String args[]) {
        MyThread my = new MyThread();
        Thread my1 = new Thread(my);
        my1.setName("窗口1");
        
        Thread my2 = new Thread(my);
        my2.setName("窗口2");
        
        Thread my3 = new Thread(my);
        my3.setName("窗口3");
        
        Thread my4 = new Thread(my);
        my4.setName("窗口4");
        
        Thread my5 = new Thread(my);
        my5.setName("窗口5");
        
        Thread my6 = new Thread(my);
        my6.setName("窗口6");
        
        Thread my7 = new Thread(my);
        my7.setName("窗口7");
        
        Thread my8 = new Thread(my);
        my8.setName("窗口8");
        
        Thread my9 = new Thread(my);
        my9.setName("窗口9");
        
        Thread my10 = new Thread(my);
        my10.setName("窗口10");
        
        my1.start();
        my2.start();
        my3.start();
        my4.start();
        my5.start();
        my6.start();
        my7.start();
        my8.start();
        my9.start();
        my10.start();
         
    }
}


进程与线程

进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,

多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。

启动线程:

线程的主要代码是在run方法里写的,但是启动的时候是调用Thread的start方法启动。

线程的状态

要想实现多线程,必须在主线程中创建新的线程对象。

任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。

取得和设置线程名称;

在Thread类中,可以通过getName()方法取得线程的

名称,通过setName()方法设置线程的名称。

线程的名称一般在启动线程前设置,但也允许为已经运行的线程设置名称。

允许两个Thread对象有相同的名字,但为了清晰,应该尽量避免这种情况的发生。

另外,如果程序并没有为线程指定名称,则系统会自动的为线程分配-一个名称。

同步代码块

在代码块上加上“synchronized"关键字的话,则此代码块就称为同步代码块。

代码块格式:

  synchronized(同步对象){
  需要同步的代码;
  }

原文地址:https://www.cnblogs.com/tengziqiang/p/11737914.html