Java多线程之( 线程 )第十七天( --进程--线程阶段--线程创建-- 线程的匿名创建)

进程: 每个进程都有独立的代码和数据空间( 进程上下文 );

线程:同一类线程共享代码和数据空间,每个线程都有独立的运行栈和陈旭计数器,(线程是cpu调度最小单位);

线程和进程一样一共分为六个阶段:

1. 新建装态( new Thread)  2. 运行状态( start()) 3.死亡状态( run()方法调用完毕);4.受阻塞(cpu未执行该线程)

5 . 休眠状态(sleep,休眠时间过了--恢复--可能运行,可能阻塞);6.等待状态(wait notify);



3 实现多线程的2种方法;

   1. 创建一个类去继承Thread类, 

//创建一个类实现Thread类:
 class TestThread extends Thread{
      //必须重写run()方法
     @Overrride
      public void fun(() {
          System.out.println(Thread.currentThread().getName());
     }
 }
//在main 函数里面执行
      TestThread t= new TestThread();
      t.start();
      fun();
  2.创建一个类实现Runnable接口;

class Shi implements Runnable{
    //重写接口中run(()方法;
   public void run(){
       for (int i = 0; i < 100; i++) {
		System.out.println(Thread.currentThread().getName() + "---" + i);
	   }
      } 
 }
//在main函数里面;
 Shi s1 = new Shi();
//创建一个线程类对象,将接口的实现类往对象里面穿, 有点像Treeset里面排序使用到比较器一样;
Thread thread = new Thread((s1);
 //开始线程;
thread.start();

3 匿名内部类的创建:

//给一个类;
class Test{
      public void fun() {
          System.out.println("你好啊")
     }
 }

//创建一个接口:
Interface TestInter{
    public abstractvoid fun(();
 }

    3.1 匿名内部类创建对象, new Test ( ){ }: 相当于Test子类的对象,这样就不用再继承以后后创建对象了

          大括号里面中重写,父类中的方法;

Test test = new Test(){
   //重写fun方法
 @ Override
  public void fun() {
       sout(" 你真美")
  }
}

    3.2 匿名对象直接创建接口类的实现对象,必须重写接口中的抽象方法;

扫描二维码关注公众号,回复: 1742325 查看本文章
TestInter in = new TestInter(){
  @Override
    public void fun() {
          sout( "我是接口中重写的方法");
     }
 }

4. 利用匿名内部类的方式:给集合中的三个学生对象按照年龄进行排序;

  首先:student实现比较器( comparator ) ;重写compare方法.其次: 将实现类对象传入到集合中去;

//声明接口类的实现类对象;
Comparator <Student> comparator = new Comparator <Student>(){
   //重写接口中的方法
    @Override
 public int compare (Student o1,Student o2){
     int num = o1.getName()(- o2.getName();
      return num;
 }
};

//传入创建出来的实现类对象;这里传入的是实现比较器接口的实现类;
  TreeSet<Student> t = new TreeSet<>(comparator);
  t.add(new student( "王二",11));
  t.add(new student( "王3",15));
  t.add(new student( "王4",12));
  sout(t);

5.线程的匿名创建;

     方式1 Thread子类进行创建;

//用Thread子类进行创建
Thread th = new Thread(){
    @Override //重写run()方法
    public void run(){
      
  };
    //线程启动
    th.start();

}

    方式2( 接口实现类的方式 ) 这里与比较器( comparator )很相似,

  Runnable runn= new runn(){
 //重写接口中的抽象方法 run();
    @override
     public void run () {
        
       }
};
  创建一个Thread类将runnable实现类穿进去;
   Thread thr = new Thread(runn);
   thr.start();

 方式3 ( 简写 ) 

// 方式3(方式)`    
		Thread thread4 = new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub

			}
		});
		thread4.start();





猜你喜欢

转载自blog.csdn.net/a18755425397/article/details/80570591