当前位置: 移动技术网 > IT编程>开发语言>Java > 线程基本使用

线程基本使用

2020年03月23日  | 移动技术网IT编程  | 我要评论

1.继承thread,覆盖run()方法

public class threaddemo1 extends thread{
    @override
    public void run() {
        for (int i = 0; i < 20; i++) {
          /*  system.out.println("run"+i);
            thread thread = thread.currentthread();
            system.out.println(thread);
            string name = thread.getname();
            system.out.println(name);*/
            system.out.println(thread.currentthread().getname()+"===>"+i);
        }

    }
}

public class maintest {
    public static void main(string[] args) {
        threaddemo1 threaddemo1 = new threaddemo1();
        threaddemo1 threaddemo11 = new threaddemo1();
        threaddemo1.start();
        threaddemo11.start();
        for (int i = 0; i < 20; i++) {
            system.out.println("main"+i);
        }
    }
}

2.实现runnable接口,覆盖run()方法

public class runnableimpl implements runnable {
    @override
    public void run() {
        for (int i = 0; i < 20; i++) {
            system.out.println(thread.currentthread().getname()+"=====>"+i);
        }
    }
}

public class maintest {
    public static void main(string[] args) {
        runnableimpl run = new runnableimpl();
        new thread(run).start();
        new thread(run).start();
        new thread(run).start();
        new thread(run).start();
        for (int i = 0; i < 20; i++) {
            system.out.println("main"+i);
        }
    }
}

3.线程案例

public class runnableimpl implements runnable {
    private int ticket=100;
    @override
    public void run() {
        while (true){
            if (ticket>0){
                try {
                    thread.sleep(10);
                } catch (interruptedexception e) {
                    e.printstacktrace();
                }
                system.out.println(thread.currentthread().getname()+"正在卖第"+ticket+"张票");
                ticket--;
            }
        }

    }
}

public class ticketdemo {
    public static void main(string[] args) {
        runnableimpl runnable = new runnableimpl();
        thread t1 = new thread(runnable);
        thread t2 = new thread(runnable);
        thread t3 = new thread(runnable);
        t1.start();
        t2.start();
        t3.start();
    }
}

存在一票多售和无效票,需要解决线程安全问题

在可能出现线程问题的代码上添加同步锁,保证锁为同一把就完了;新创建一个对象,或者this当前类,或者同步代码块,同步方法;静态方法使用静态变量也有可能出现线程问题,还是得使用同步机制。

public class runnableimpl implements runnable {
    private int ticket=100;
    object object=new object();
    @override
    public void run() {
        while (true){
          synchronized (object){
              if (ticket>0){
                  try {
                      thread.sleep(10);
                  } catch (interruptedexception e) {
                      e.printstacktrace();
                  }
                  system.out.println(thread.currentthread().getname()+"正在卖第"+ticket+"张票");
                  ticket--;
              }
          }
        }

    }
}
public class runnableimpl implements runnable {
    private int ticket=100;
    @override
    public void run() {
        while (true){
            payticket();

        }

    }
    public synchronized void payticket(){
        if (ticket>0){
            try {
                thread.sleep(10);
            } catch (interruptedexception e) {
                e.printstacktrace();
            }
            system.out.println(thread.currentthread().getname()+"正在卖第"+ticket+"张票");
            ticket--;
        }
    }
}
public class runnableimpl implements runnable {
    private int ticket=100;
    @override
    public void run() {
        while (true){
           synchronized (this){
               if (ticket>0){
                   try {
                       thread.sleep(10);
                   } catch (interruptedexception e) {
                       e.printstacktrace();
                   }
                   system.out.println(thread.currentthread().getname()+"正在卖第"+ticket+"张票");
                   ticket--;
               }
           }
        }

    }
}
public class runnableimpl implements runnable {
    private static int ticket=100;
    @override
    public void run() {
        while (true){
            payticket();

        }

    }
    public static synchronized void payticket(){
        if (ticket>0){
            try {
                thread.sleep(10);
            } catch (interruptedexception e) {
                e.printstacktrace();
            }
            system.out.println(thread.currentthread().getname()+"正在卖第"+ticket+"张票");
            ticket--;
        }
    }
}
public class runnableimpl implements runnable {
    private int ticket=100;
    lock lock=new reentrantlock();
    @override
    public void run() {
        while (true){
            lock.lock();
            if (ticket>0){
                try {
                    thread.sleep(10);
                } catch (interruptedexception e) {
                    e.printstacktrace();
                }
                system.out.println(thread.currentthread().getname()+"正在卖第"+ticket+"张票");
                ticket--;
            }
            lock.unlock();
        }

    }
}

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网