zoukankan      html  css  js  c++  java
  • 线程

    在java中有两种方式实现线程,继承Thread类和实现Runnable接口

    方法一:

    一个类只要继承了Thread类,同时覆写了run()方法那么就能实现多线程。


    public class ThreadDemo extends Thread{

        private String name;
        public ThreadDemo(String name)
        {
            this.name=name;
        }   
        public void run()
        {
            for(int i=0;i<5;i++)
                System.out.print("Thread运行:"+name+"i->"+i);
        }
    }

    public class ThreadTest {
    public static void main(String[] args)
    {
        ThreadDemo t1=new ThreadDemo("线程A");
        ThreadDemo t2=new ThreadDemo("线程B");

        //线程启动jvm自动找到run()方法
        t1.start();
        t2.start();
    }
    }

    方法二:

    实现Runnable接口,覆写公共的run()方法


    public class ThreadDemo implements Runnable{
        private String name;
        public ThreadDemo(String name)
        {
            this.name=name;
        }   
        public void run()
        {
            for(int i=0;i<5;i++)
                System.out.print("Thread运行:"+name+"i->"+i);
        }
    }

    public class ThreadTest {
    public static void main(String[] args)
    {
     ThreadDemo t1=new ThreadDemo("线程A");
     new Thread(t1).start();
    }
    }
    Runable比Thread线程安全

    设置线程名称:

    在Thread类中可以使用setName(String name),Thread(Runnable target,String name),Thread(String name)

    取出线程名称:

    在Thread类中可以使用getName();

    public static Thread currentThread()得到当前线程的名称

    在java执行中一个java程序至少启动两个线程:main,gc两个线程。

    线程的休眠:

    Thread.sleep(2000)需要try……catch(){}异常为InterruptException中断异常

    线程的同步和异步

    1,同步代码块

    synchronized(this){//同步代码块}


    public class ThreadDemo implements Runnable{
        int tick=5;
        public void run()
        {
          for(int i=0;i<5;i++)
              synchronized(this)
              {
                  if(this.tick>0)
                  System.out.println(Thread.currentThread().getName()+"->"+tick--);
              }
        }
    }

    public class ThreadTest {
    public static void main(String[] args)
    {
     ThreadDemo t1=new ThreadDemo();
     new Thread(t1,"线程A").start();
     new Thread(t1,"线程B").start();
     new Thread(t1,"线程C").start();
    }
    }

    2,同步方法


    public class ThreadDemo implements Runnable{
        int tick=5;
        public void run()
        {
          this.sail();
        }
        public synchronized void sail()
        {
            for(int i=0;i<5;i++)
            {
                      if(this.tick>0)
                      System.out.println(Thread.currentThread().getName()+"->"+tick--);
            }
        }
    }

    public class ThreadTest {
    public static void main(String[] args)
    {
     ThreadDemo t1=new ThreadDemo();
     new Thread(t1,"线程A").start();
     new Thread(t1,"线程B").start();
     new Thread(t1,"线程C").start();
    }
    }

  • 相关阅读:
    codeforces 1060 B
    codeforces 1060 A
    牛客 国庆七天乐 day1 L
    BZOJ 1087: [SCOI2005]互不侵犯King
    codeforces 792CDivide by Three(两种方法:模拟、动态规划
    codeforces 797C Minimal string
    codeforces 110E Lucky Tree
    codeforces 798D
    2017福建省赛 FZU2272~2283
    Android -- Looper、Handler、MessageQueue等类之间关系的序列图
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1941966.html
Copyright © 2011-2022 走看看