第九周课程总结
取得设置线程名称
在Thread类中,可以通过 getName() 方法取得线程的名称,通过 setNmae()方法设置线程的名称
class MyThread implements Runnable{                                                          //实现Runnable接口
       public void run(){                                                                                      //覆写接口中的run()方法
          for(int i=0;i<3;i++){                                                                                //循环输出3次
                 System.out.println(Thread.currentThread().getName()+"运行,i="+i);            //取得当前线程的名称
        }
    }
};
public class ThreadNameDemo{
     public static void main(String args[]){
            MyThread my =new MyThread();                                                       //定义Runnable子类对象
                new Thread(my).start();                                                                 //系统自动设置线程名称
                new Thread(my,"线程-A").start();                                                   //手工设置线程名称
                new Thread(my,"线程-B").start();
                new Thread(my).start();
                new Thread(my).start();
        }
}由上可知,在Thread类中必然存在一个static类型的属性,用于为线程自动命名
判断线程是否启动
因为线程通过Thread类之中的start()方法通知CPU这个线程已经准备好启动,然后就等待分配CPU资源,运行此线程。在Java中可以使用isAlive()方法来测试线程是否已经启动而且还在运行
线程的强制运行
可以使用join()方法让一个线程强制运行。在线程强制运行期间 其他线程无法运行,必须等待此线程完成之后才可以继续执行
线程的休眠
可以直接使用Thread.sleep()方法即可实现
中断线程
当一个线程运行时,另外一个线程可以直接通过interrupt()方法,中断其运行状态
线程的优先级
在Java线程操作中,哪个线程优先级高就有可能先被执行 所以可以使用 setPriority() 方法可以设置一个线程的优先级
| 定义 | 描述 | 表示的常量 | 
|---|---|---|
| public static final int MIN_PRIORITY | 最低优先级 | 1 | 
| public static final int NORM_PRIORITY | 中等优先级,是线程的默认优先级 | 5 | 
| public static final int MAX_PRIORITY | 最高优先级 | 10 | 
线程的礼让
使用yield()方法可以将一个线程的操作暂时让给其他线程执行
Java IO
操作文件的类-----File
File类的构造方法
public File(String pathname) →实例化File类的时候,必须设置好路径| 序号 | 方法或常量 | 类型 | 描述 | 
|---|---|---|---|
| 1 | public static final String pathSeparator | 常量 | 表示路径的分隔符(windows 是:";") | 
| 2 | public final String separator | 常量 | 表示路径的分隔符(windows 是:"") | 
| 3 | public File(String pathname) | 构造 | 创建File类对象,传入完整路径 | 
| 4 | public File(File parent,String child) | 构造 | 根据指定的父路径创建子文件 | 
| 5 | public boolean createNewFile() throws IOException | 普通 | 创建新文件 | 
| 6 | public boolean delete() | 普通 | 删除文件 | 
| 7 | public boolean exists() | 普通 | 判断文件是否存在 | 
| 8 | public boolean isDirectory() | 普通 | 判断给定的路径是否是一个目录 | 
| 9 | public long length() | 普通 | 返回文件的大小 | 
| 10 | public String[] list() | 普通 | 列出指定目录的全部内容,只是列出了名称 | 
| 11 | public File[] listFiles() | 普通 | 列出指定目录的全部内容,会列出路径 | 
| 12 | public boolean mkdir() | 普通 | 创建一个目录 | 
| 13 | public boolean mkdirs() | 普通 | 创建多级目录 | 
| 14 | public boolean renameTo(File dest) | 普通 | 为已有的文件重新命名 | 
| 15 | public long lastModified | 普通 | 取得文件的最后一次修改日期时间 | 
| 16 | public File getParentFile() | 普通 | 取得当前路径的父路径 | 
可以使用list()方法列出一个目录中的全部内容
实验报告(七)
实验任务详情:
完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
源代码
package TTT;
public class Ticket implements Runnable{
    
    private  int tickets =1000;
    @Override
    public void run() {
        for (int i=0;i<1000;i++) {
            synchronized(this) {
                if(tickets>0) {
                    
                    try {
                        Thread.sleep(1000);
                    }catch(InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"卖票:tickets="+tickets);
                    tickets--;
                    if(tickets==0) {
                        System.out.println("票已售完");
                    }
                }
                else {
                    break;
                }
            }
        }
        }
    
};
package TTT;
public class Demo {
    public static void main(String[] args) {
        Ticket mt=new Ticket();
        Thread t1=new Thread(mt,"窗口A");
        Thread t2=new Thread(mt,"窗口B");
        Thread t3=new Thread(mt,"窗口C");
        Thread t4=new Thread(mt,"窗口D");
        Thread t5=new Thread(mt,"窗口E");
        Thread t6=new Thread(mt,"窗口F");
        Thread t7=new Thread(mt,"窗口G");
        Thread t8=new Thread(mt,"窗口H");
        Thread t9=new Thread(mt,"窗口I");
        Thread t10=new Thread(mt,"窗口J");
        
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        t6.start();
        t7.start();
        t8.start();
        t9.start();
        t10.start();
    }
}截图



原文:https://www.cnblogs.com/edg4396/p/11734008.html