Thread创建线程

来源:互联网 发布:网络金融考试 编辑:程序博客网 时间:2024/06/06 00:43

1、  多线程的概念:多线程是实现并发控制的一种有效手段,线程是指程序运行的流程。

多线程是指可以同时运行多个程序块,是程序运行效率更高。

2、 一个进程包含多个线程;

线程是程序中的执行线程。Java 虚拟机允许应用程序并发多个执行线程。


3、 创建新执行线程有两种方法。一种方法是将类声明为Thread 的子类。该子类应重写Thread 类的run 方法。接下来可以分配并启动该子类的实例。如,计算大于某一规定值的质数的线程可以写成。


4、 创建Thread 线程的三个步骤:

  • 定义类继承 Thread;
  • 覆写 Thread 类中的run() 方法。目的:将自定义代码存储在run方法中;
  • 调用线程的start() 方法,该方法有两个作用,启动线程,调用run()方法。

public class Customer extends Thread{        String name;    public void run(){        for(int i=0;i<10;i++){            System.out.println(name+"\t"+i);        }    }}
public class UseCustomer{    public static void main(String args[]){        Customer m=new Customer();        m.name="a";        Customer m1=new Customer();        m1.name="b";        m.rum();//主线线程主线线程线程        m.start();        m1.Start();    }}

例子:窗口卖票

public class ccticket extends Thread{    String name;    static int ticket=5;//在创建线程的时候,不建议用static    public void run(){while(ticket>0){  System.out.println(name+"卖了第"+ticket+"票");}}}
public class Useccticket{public static void main(String args[]){ccticket c=new ccticket();ccticket c1=new ccticket();c.name="1号窗口";c1.name="2号窗口";c.start();c2.start();}}

会出现bug,线程本身的问题。



5、另一种创建线程的方法,声明实现Runable 接口的类。(推荐使用)

  • 定义类实现 Runable 接口;
  • 覆盖 Thread 类来建立线程对象,将线程要运行的代码放入到run() 方法中;
  • 通过Thread 类来建立线程对象;
  • 将 Runable 接口的子类对象作为实际参数传递给Thread 类的构造函数;
  • 调用 Thread 类的Start() 方法开启线程并掉哦那个Runnable 接口子类的run() 方法。

public class Ticket implements Runable{private int ticket=1;public void run(){  while(ticket<6){show();}}public synchronized void show(){if(ticket<6){try{    Thread.sleep(10);}catch(Exception e){System.out.println(Thread.currentThread().getName()+"卖出去了第"+ticket+"票")}}}}
public class Useticket{public static void main(String args[]){Ticket t=new Ticket();new Thread(t).start();new Thread(t).start();}

6、 Runable 接口和Thread继承类实现多线程区别

  •  Runable 接口可以避免由于Java单季承的局限性,更适合多个相同程序代码的线程去处理同一资源情况,实现资源共享。
  • 同步:一个多线程如果通过 Runable 接口实现,则意味着类中的属性被多个线程共享。
  • 如果多个线程操作同一资源,就有可能出现资源是否同步问题。
  • 在Thread 类之中可以发现有一个名为sleep(long millis) 的静态方法,此方法用于线程是休眠。(定义休眠的时间)
  • 解决这样的问题,必须使用同步来解决
  • 此线程完成后才可以继续进行
  • 同步可以通过同步块或同步方法来完成。


原创粉丝点击