zoukankan      html  css  js  c++  java
  • java线程

    public class ThreadDemo extends Thread {
    	/*
    	 * 学习多线程之前,我们先要了解几个关于多线程有关的概念。
    		A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,
    		即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
    		
    		B:线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。
    		一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
    		
    		C:简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
    		什么是多线程呢?即就是一个程序中有多个线程在同时执行。
    	 */
    	
    	/*
    	 * 多线程的实现方式:
    	 * 		方式1:一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例
    	 * 
    	 * Thread
    	 * 		String getName()      返回该线程的名称。 
    	 * 		void   setName(String name) 改变线程名称,使之与参数 name 相同。
    	 * 
    	 * 
    	 * CPU执行程序的随机性
    	 */
    	public static void main(String[] args) {
            ThreadDemo threadDemo=new ThreadDemo();
            threadDemo.setName("线程一");//设置线程的名字
            threadDemo.start();
            ThreadDemo mtDemo=new ThreadDemo();
            mtDemo.setName("线程二");
            mtDemo.start();
    	}
    	
    	public void run() {//start()启动线程程序
    		for(int i=0;i<10;i++)
    		{
    			System.out.println(getName()+" "+i);
    		}
    		
    	}
    }
    

      

    import java.util.concurrent.ConcurrentLinkedDeque;
    
    /*
     * 实现线程二:实现Runnable接口
    	创建线程的另一种方法是声明实现 Runnable 接口的类。
    	该类然后实现 run 方法。然后创建Runnable的子类对象,
    	传入到某个线程的构造方法中,开启线程。
    
    
    	为何要实现Runnable接口,Runable是啥玩意呢?继续API搜索。
                 查看Runnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。
                 包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。
     */
    public class ThreadDemo2 implements Runnable {
    
    	@Override
    	public void run() {
    		for(int i=0;i<10;i++)
    		{
    			System.out.println(Thread.currentThread().getName()+" "+i);
    		}
    		
    	}
    	public static void main(String[] args) {
    		ThreadDemo2 threadDemo2=new ThreadDemo2();
    		Thread t=new Thread(threadDemo2);
    		Thread thread=new Thread(threadDemo2);
    		t.setName("线程一");
    		thread.setName("线程二");
    		t.start();
    		thread.start();
    	}
     
    }
    

      

    窗口售票

    public class TicktetTest implements Runnable {
    	int tickets=100;
    	int all=0;
    	public static void main(String[] args) {
    		TicktetTest ticktetTest=new TicktetTest();
    		Thread t1=new Thread(ticktetTest);
    		t1.setName("窗口一:");
    		Thread t2=new Thread(ticktetTest);
    		t2.setName("窗口二");
    		Thread t3=new Thread(ticktetTest);
    		t3.setName("窗口三");
    		t1.start();
    		t2.start();
    		t3.start();
    	}
    
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		while(true) {
    			if(tickets>0) {
    				System.out.println(Thread.currentThread().getName()+" "+"售出一张车票"+--tickets);
    			}
    			else {
    				System.out.println(Thread.currentThread().getName()+":售票结束");
    				break;
    			}
    		}
    		
    	}
    }
    

      

    public class TicktetTest implements Runnable {
    	int tickets=100;
    	Object obj=new Object();
    	int all=0;
    	public static void main(String[] args) {
    		TicktetTest ticktetTest=new TicktetTest();
    		Thread t1=new Thread(ticktetTest);
    		t1.setName("窗口一:");
    		Thread t2=new Thread(ticktetTest);
    		t2.setName("窗口二");
    		Thread t3=new Thread(ticktetTest);
    		t3.setName("窗口三");
    		t1.start();
    		t2.start();
    		t3.start();
    	}
    
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		while(true) {
    			/*
    			 * 同步方法:使用关键字synchronized修饰的方法,一旦被一个线程访问,则整个方法全部锁住,其他线程则无法访问
    			 * 
    			 * synchronized
    			 * 注意:
    			 * 		非静态同步方法的锁对象是this
    			 * 		静态的同步方法的锁对象是当前类的字节码对象
    			 */
    			synchronized (obj) {//同步安全性高,效率低。
    				if(tickets>0) {
    					System.out.println(Thread.currentThread().getName()+" "+"售出一张车票"+--tickets);
    				}
    				else {
    					System.out.println(Thread.currentThread().getName()+":售票结束");
    					break;
    				}
    			}
    			
    		}
    		
    	}
    }
    

      

    一纸高中万里风,寒窗读破华堂空。 莫道长安花看尽,由来枝叶几相同?
  • 相关阅读:
    视频质量诊断之详解
    Leetcode 22.生成括号对数
    leetcode 19.删除链表的第n个节点
    Leetcode 11.盛最多水的容器
    Leetcode 6.Z字形变换
    Leetcode 4.两个排序数组的中位数
    Leetcode 3.无重复字符的最长子串
    Leetcode 1.两数之和
    RNN and Language modeling in TensorFlow
    Tensorflow word2vec+manage experiments
  • 原文地址:https://www.cnblogs.com/byczyz/p/11141410.html
Copyright © 2011-2022 走看看