15.java线程(没谱的特点)

来源:互联网 发布:恢复电脑数据的软件 编辑:程序博客网 时间:2024/06/05 02:56
1.进程和线程

   多进程:操作系统同时运行多个任务;
   多线程:就是进程执行中的一个流程;
2.多线程程序运行模式
                               单线程和多线程
 
3.定义线程方法
   线程也是个对象。
   创建线程方法:
     1、定义一个线程类,继承Thread并重写其中的方法run(),run里面的代码称为线程体。
           (java只支持单继承,用这种方法定义的类不能继承其他类java)
          启动线程:对象.start(),调用了的run方法。
  1. classMyThreadextendsThread{   publicvoid run(){   //处理具体逻辑   }}newMyThread().start();
     2、第二种方法
           1)建立Runnable类的对象(线程的任务);
           2)生成一个Thread对象,并将Runnable接口实现类的对象作为参数传递给该Thread对象
                ri是Runnable接口实现类的对象,执行工人。
                Thread t = new Thread(ri),
           3)通知Thread对象执行start()方法;
  1. classMyThreadimplementsRunnable{   publicvoid run(){     //处理具体的逻辑    }}MyThread myThread =newMyThread();newThread(myThread).start();
     两种方案的区别:由于java单继承,第二种方法好处是线程的线程体和执行线程给拆分开了
                                 建议用第二种。
     匿名内部类实现:
  1. newThread(newRunnale(){   publicvoid run(){  //处理具体的逻辑  }}).start();
4.线程简单的控制方法
      1)中断线程
             -Thread.sleep() //休眠
             -Thread.yield() //让出CPU,重新抢
      2)  设置线程的优先级(最大10,最小1,可用静态常量来设置 MAX_PRIORITY)
             -getPriority()  //获取优先级
             -setPriority()  //设置优先级
           优先级高执行的概率越大,并不是第一个执行。
4.多线程的数据安全(访问完整性)
   多线程同用同一份数据的时候会产生该错误。并发性问题,引起竞争状态。
   情况: 生成的两个Thread对象,但是这两个Thread对象共用同一个线程体;
               每个线程都有名字,可以通过Thread对象的setName()方法设置线程名字。也可以使用getName方法获取线程的名字,分别启动两个线程。
   同步线程解决方法:同步代码块(同步锁)
                     synchronized(this){}
5.synchronized
    1)同步代码块作用:
   一旦一个线程获得了一个对象的同步锁,那么这个对象上所有其他的同步的代码都是不能被其他
   线程执行的,都需要等待同步锁被释放后执行。
    synchronized(对象)
   2)同步方法:
public synchronized void fun1()
        锁住的对象也是this(调用这个函数的对象)
   3)同步方法和同步代码块区别:
         同步代码块指定具体哪个对象。同步方法锁住的就是调用这个函数的对象
        
 
0 0
原创粉丝点击