java_jar命令_线程_itEighteen

/**
 * 线程
 */
class ThreadDemo1{
    public static void main(String[] args)  {       
        MyThread t1 = new MyThread();
        YourThread t2 = new YourThread();
        //启动线程
        t1.run();           //1个线程.
        t2.start();
    }
}

class MyThread extends Thread{
    //执行线程的时候进行调用,jvm负责调用
    public void run(){
        while(true){
            System.out.println("myThread");
            yield();        //放弃cpu的抢占权
        }
    }
}
//
class YourThread extends Thread{
    public void run(){
        while(true){
            System.out.println("yourThread");
            yield();
        }
    }
}

join

class ThreadDemo2 {
    public static void main(String[] args)  {
        Player p1 = new Player("成龙",5000);
        Player p2 = new Player("狄龙",8000);
        Player p3 = new Player("史泰龙",2000);
        Player p4 = new Player("李小龙",3000);
        //
        try{
            p1.start();
            p2.start();
            p3.start();
            p4.start();

            p1.join();
            p2.join();
            p3.join();
            p4.join();
        }catch(Exception e){
        }
        System.out.println("人到齐了,开局!!");
    }
}
//玩家.
class Player extends Thread{
    private String name ;
    private int time ;
    public Player(String name,int time){
        this.name = name ;
        this.time = time ;
    }

    public void run(){
        System.out.println("玩家:" + name + " 出发了!");
        try{
            //让当前线程休眠time毫秒数
            Thread.sleep(time);
        }
        catch(Exception e){
        }
        System.out.println("玩家:" + name + ":" + time +  " 到了!");
    }
}

这里写图片描述

守护线程

class ThreadDemo3 {
    public static void main(String[] args)  {
        Room r1 = new Room("no1",5000);
        Waiter w = new Waiter();
        //设置线程为守护线程
        //w.setDaemon(true);
        r1.start();
        w.start();
    }
}
class Room extends Thread{
    private String no ;
    private int time ;
    public Room(String no,int time){
        this.no = no ;
        this.time = time ;
    }
    public void run(){
        System.out.println(no + "号房间正在唱歌!");
        try{
            Thread.sleep(time);
        }
        catch(Exception e){
        }
        System.out.println(no + "号房间买单了,走人了!");
    }
}
//服务员
class Waiter extends Thread{
    public Waiter(){
        this.setDaemon(true);
    }
    public void run(){
        while(true){
            System.out.println(new java.util.Date());
            try{
                Thread.sleep(1000);
            }
            catch(Exception e){
            }
        }
    }
}
class ThreadDemo4 {
    public static void main(String[] args)  {
        Saler s1 = new Saler("老张");
        Saler s2 = new Saler("老王");
        s1.start();
        s2.start();
    }
}

class Saler extends Thread{
    //锁
    static Object lock = new Object();
    //票数
    static int tickets = 100 ;
    private String name ;
    public Saler(String name){
        this.name = name ;
    }

    public void run(){
        synchronized(lock){
            while(tickets > 0){
                int currTicket = tickets ;
                tickets = tickets - 1 ;
                System.out.println(name  + " : " + currTicket);
            }
        }
    }
}
class ThreadDemo5 {
    public static void main(String[] args)  {
        Saler s1 = new Saler("==>老张");
        Saler s2 = new Saler("=====>老王");
        Saler s3 = new Saler("===========>老赵");
        s1.start();
        s2.start();
        s3.start();
    }
}
class Saler extends Thread{
    //锁
    static Object lock = new Object();
    //票数
    static int tickets = 100 ;
    private String name ;
    public Saler(String name){
        this.name = name ;
    }
    public void run(){
        while(true){
            int tick = getTicket();
            if(tick > 0){
                System.out.println(name + " : " + tick);
            }
            else{
                return ;
            }
        }
    }
    //取票
    public int getTicket(){
        //同步代码块
        synchronized(lock){
            int currTicket = tickets ;
            tickets -- ;
            return currTicket ;
        }
    }
}
class ThreadDemo6 {
    public static void main(String[] args)  {
        Saler s1 = new Saler("==>老张");
        Saler s2 = new Saler("=====>老王");
        s1.start();
        s2.start();
    }
}
class Saler extends Thread{
    //票数
    static int tickets = 100 ;
    private String name ;
    public Saler(String name){
        this.name = name ;
    }
    public void run(){
        while(true){
            int tick = getTicket();
            if(tick > 0){
                System.out.println(name + " : " + tick);
            }
            else{
                return ;
            }
        }
    }

    //同步方法
    public static synchronized int getTicket(){
        //同步代码块
        int currTicket = tickets ;
        tickets -- ;
        return currTicket ;
    }
}
class ThreadDemo7 {
    public static void main(String[] args) {
        TicketPool pool = new TicketPool();
        Saler s1 = new Saler("Marry" , pool);
        Saler s2 = new Saler("======>john" , pool);
        s1.start();
        s2.start();
    }
}

//票池
class TicketPool{
    private int tickets = 100 ;
    //从票池取票
    public synchronized int getTicket(){
        int ticket = tickets ;
        tickets -- ;
        return ticket ;
    }
}
//售票员
class Saler extends Thread{
    private TicketPool pool ;
    private String name ;
    public Saler(String name , TicketPool pool){
        this.name = name ;
        this.pool = pool ;
    }

    public void run(){
        while(true){
            int no = pool.getTicket();
            if(no > 0){
                System.out.println(name + " : " + no);
            }
            else{
                return ;
            }
        }
    }
}
jar
------------------
    1.打包方式一
        jar cvf xxx.jar Xxx.class yyy.class     //将指定的class文件导入到jar中

    2.打包方式二
        jar cvf xxx.jar -C dir/ .           //将某个目录下的所有文件打入到jar中

    3.查看jar文件
        jar -tf xxx.jar

    4.运行jar中的类
        java -cp xxx.jar xx.x.x.x.Xxxx      //后面跟完整类名

    5.指定清单文件(xxx.jar/META-INF/MENIFEST.MF)的入口类.
        语法:jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
        jar -cvfe classess.jar com.it18zhang.java.PackageDemo1 -C classes/ .

    6.如果jar中的清单文件含有入口点(Main-Class),可以使用如下命令直接执行程序
        java -jar classess.jar

完整过程
------------------
    1.编写java源文件
        ..
    2.编译java源文件,生成.class文件,指定目录
        mkdir test2/classes         //存放class文件
        cd test2/src                //存放源代码
        javac -d ..\classes HelloWorld.java //这条命令的执行是在src下,指定编译的输出目录为src\classes,源文件的路径名下的主程序入口。
        tree /F                 //进到classes目录下,执行该条命令
    3.运行java程序
        cd d:\
        java -cp d:\test2\classes com.it18zhang.java.HelloWorld
    4.打包jar文件
        f : 指定jar文件名
        e : 指定入口点类(含有main函数的类).
        cd d:\test2
        jar cvfe classes.jar com.it18zhang.java.HelloWorld -C classes/ .        //在d:\test2下,生成classes.jar
    5.查看jar文件   
        jar -tf classes.jar 
    6.执行jar文件
        java -jar classes.jar 

相对路径
------------
    cd java      //相对于当前目录下

绝对路径
------------
    cd d:\java\classes  


对线程
--------------------
    进程  :运行时概念,运行的应用程序。进程间不能共享内存。进程间通信需要用到socket

    线程  :应用程序内部并发执行的代码段,共享内存。

宏观:
--------------
    CPU : (轮询)、多核(有多个CPU内核,而每个CPU是独立的存储单元。)

    较真 : 很难精准控制,执行的先后顺序。

Thread:
--------------
    java.lang.Thread

    yield       :放弃cpu抢占权,有谦让之意.
    join        :等指定的线程执行完之后继续运行。()
    sleep       :静态方法,让线程休眠毫秒数。
    daemon      :守护线程.如果应用程序剩余的线程都是守护线程,则程序结束。
其实一个栈(运行时概念)就是一个线程

锁
-----------------
    任意一个对象都可以是锁。信号灯,参照物。
    同步代码块:
        synchronized(lock){...}

    同步方法:非静态同步方法以当前对象作为锁旗标
        public synchronized void xxx(){...}

    同步方法:静态同步方法以当前类作为锁旗标

售票
----------------
    100
    线程安全:

猜你喜欢

转载自blog.csdn.net/weixin_37243717/article/details/80649376
今日推荐