zoukankan      html  css  js  c++  java
  • 170306网络编程线程

    一.线程的控制举例  and 简单界面 实现计时功能 

     1 package runnable;
     2 
     3 import java.awt.GridLayout;
     4 import java.awt.event.*;
     5 import java.util.Date;
     6 
     7 import javax.swing.*;
     8 
     9 public class ControlThreadDemo extends JFrame{
    10     
    11     JLabel jlb1;
    12     JButton jb1,jb2;
    13     JPanel jp1;
    14     Thread thread1;
    15     boolean isExit=false;
    16     
    17     public ControlThreadDemo(){
    18         this.setLocation(100,100);
    19         this.setSize(300,300);
    20         this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    21         this.setLayout(new GridLayout(2,1));//两行一列
    22         
    23         jp1=new JPanel();
    24         jb1=new JButton("启动");
    25         jlb1=new JLabel("显示当前时间");
    26         this.add(jlb1);
    27         //添加监听器
    28         jb1.addActionListener(new ActionListener(){
    29 
    30             @Override
    31             public void actionPerformed(ActionEvent arg0) {
    32                 // TODO Auto-generated method stub
    33                 thread1=new Thread(new Runnable(){
    34 
    35                     @Override
    36                     public void run() {
    37                         // TODO Auto-generated method stub
    38                         //获取当前时间 的字符串    date
    39                         while(!isExit){
    40                             jlb1.setText("当前时间为:"+new Date().toString());
    41                             try {
    42                                 Thread.sleep(1000);//1秒
    43                             } catch (InterruptedException e) {
    44                                 // TODO Auto-generated catch block
    45                                 e.printStackTrace();
    46                             }
    47                         }
    48                         
    49                     
    50                         
    51                     }
    52                     
    53                 });
    54                 thread1.start();
    55             }
    56             
    57         });
    58 //        
    59         
    60         jb2=new JButton("停止");
    61         //添加监听器
    62         jb2.addActionListener(new ActionListener(){
    63 
    64             @Override
    65             public void actionPerformed(ActionEvent arg0) {
    66                 
    67                         // TODO Auto-generated method stub
    68                         //获取当前时间 的字符串    date
    69                         // TODO Auto-generated method stub
    70                 
    71                 //这个已经out了
    72 //                        if(thread1.isAlive()){
    73 //
    74 //                            thread1.stop();
    75 //                        }
    76                 
    77                 isExit=true;
    78                     
    79                 }
    80         
    81         });
    82         
    83         jp1.add(jb1);
    84         jp1.add(jb2);
    85         this.add(jp1);
    86         
    87         this.setVisible(true);
    88                 
    89     }
    90     
    91     
    92     //在java中,一个进程至少有一个线程,该线程会执行main函数的代码,执行main函数代码的线程叫主线程
    93     public static void main(String[]args){
    94         new ControlThreadDemo();
    95     }
    96 
    97 }

    二.面向方法的Synthronize

     1 package runnable;
     2 
     3 public class SynthronizeDemo {
     4     
     5     static int count=0;
     6     
     7     //在java中,一个进程至少有一个线程,该线程会执行main函数的代码,执行main函数代码的线程叫主线程
     8     public static void main(String[]args){
     9         
    10         System.out.println("这段代码是被主线程执行的!!!!");  
    11     
    12         //对方法同步
    13         new Thread(new Runnable(){
    14 
    15             @Override
    16             public void run() {
    17                 // TODO Auto-generated method stub
    18                 for(int i=0;i<10;i++){
    19                     add(true);
    20                     try {
    21                         Thread.sleep(1000);
    22                     } catch (InterruptedException e) {
    23                         // TODO Auto-generated catch block
    24                         e.printStackTrace();
    25                     }
    26                 }
    27                     
    28             }
    29             
    30         }).start();
    31         
    32         
    33         new Thread(new Runnable(){
    34 
    35             @Override
    36             public void run() {
    37                 // TODO Auto-generated method stub
    38                 for(int i=0;i<10;i++){
    39                     add(false);
    40                     try {
    41                         Thread.sleep(1000);
    42                     } catch (InterruptedException e) {
    43                         // TODO Auto-generated catch block
    44                         e.printStackTrace();
    45                     }
    46                 }            
    47             }    
    48         }).start();
    49         
    50     }
    51     
    52     //Synthronize相当于给函数加了一把锁,只许一个访问
    53     //给方法add加一把同步锁,实现add方法对所有线程的同步
    54     public static synchronized void add(boolean flag){
    55         count++;
    56         if(flag){
    57             System.out.print("1");
    58             System.out.println("第一个线程进来了,当前count的值 为:"+count);
    59         }else{
    60             System.out.print("2");
    61             System.out.println("第二个线程进来了,当前count的值 为:"+count);
    62         }
    63     }    
    64     
    65 }

    三.面向对象的Synthronize(这段代码和上一段代码其实效果是一样的)

     1 package runnable;
     2 
     3 public class SynthronizeDemo1 {
     4     
     5     static int count=0;
     6     //定义一个对象,利用该对象实现线程同步
     7     static Object obj=new Object();
     8     
     9     //在java中,一个进程至少有一个线程,该线程会执行main函数的代码,执行main函数代码的线程叫主线程
    10     public static void main(String[]args){
    11         System.out.println("这段代码是被主线程执行的!!!!"); 
    12         
    13         //对方法同步
    14         new Thread(new Runnable(){
    15 
    16             @Override
    17             public void run() {
    18                 // TODO Auto-generated method stub
    19                 for(int i=0;i<10;i++){
    20                     add(true);
    21                     try {
    22                         Thread.sleep(1000);
    23                     } catch (InterruptedException e) {
    24                         // TODO Auto-generated catch block
    25                         e.printStackTrace();
    26                     }
    27                 }
    28                     
    29             }
    30             
    31         }).start();
    32         
    33         
    34         new Thread(new Runnable(){
    35 
    36             @Override
    37             public void run() {
    38                 // TODO Auto-generated method stub
    39                 for(int i=0;i<10;i++){
    40                     add(false);
    41                     try {
    42                         Thread.sleep(1000);
    43                     } catch (InterruptedException e) {
    44                         // TODO Auto-generated catch block
    45                         e.printStackTrace();
    46                     }
    47                 }
    48                     
    49             }
    50             
    51         }).start();
    52     }
    53     
    54     public static void add(boolean flag){
    55         //对obj对象同步,也就是在同一时刻,只有一个线程会执行后面{}里面的代码
    56         synchronized(obj){
    57             count++;
    58             if(flag){
    59                 System.out.print("1");
    60                 System.out.println("第一个线程进来了,当前count的值 为:"+count);
    61             }else{
    62                 System.out.print("2");
    63                 System.out.println("第二个线程进来了,当前count的值 为:"+count);
    64             }
    65         }
    66     }    
    67     
    68 }

    四.窗体+显示坐标 监听器

     1 package runnable;
     2 
     3 import java.awt.FlowLayout;
     4 import java.awt.event.ActionEvent;
     5 import java.awt.event.ActionListener;
     6 import java.awt.event.MouseEvent;
     7 import java.awt.event.MouseMotionListener;
     8 import java.awt.event.WindowAdapter;
     9 
    10 import javax.swing.*;
    11 
    12 public class yy extends JFrame{
    13     JButton jb1;
    14     JLabel jlb1;
    15     public yy(){
    16         this.setLocation(100,100);
    17         this.setSize(500, 500);
    18         this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//啥意思,用户单击窗口的关闭按钮时程序执行的操作
    19         
    20         jb1=new JButton("c s ");
    21         jlb1=new JLabel();
    22         
    23         jb1.addActionListener(new ActionListener(){
    24 
    25             @Override
    26             public void actionPerformed(ActionEvent arg0) {
    27                 // TODO Auto-generated method stub
    28                 System.out.println("hello zhbit");
    29             }
    30         });
    31         
    32         this.add(jb1);
    33         this.add(jlb1);
    34         this.setLayout(new FlowLayout());
    35         
    36         this.addMouseMotionListener(new MouseMotionListener(){
    37 
    38             @Override
    39             public void mouseDragged(MouseEvent arg0) {
    40                 // TODO Auto-generated method stub
    41                 
    42             }
    43 
    44             @Override
    45             public void mouseMoved(MouseEvent arg0) {
    46                 // TODO Auto-generated method stub
    47                 int x=arg0.getX();
    48                 int y=arg0.getY();
    49                 jlb1.setText("x= "+x+"  y= "+y);
    50             }
    51             
    52         });
    53         this.addWindowListener(new MyWindowsListener());
    54         
    55         this.setVisible(true);
    56     }
    57     
    58     public static void main(String[]args){
    59         new yy();
    60     }
    61     class MyWindowsListener extends WindowAdapter{
    62         
    63     }
    64 
    65 }

    五.1使用外部类定义Thread

     1 package runnable;
     2 
     3 public class ThreadDemo {
     4     
     5     //在java中,一个进程至少有一个线程,该线程会执行main函数的代码,执行main函数代码的线程叫主线程
     6     public static void main(String[]args){
     7         
     8         System.out.println("这段代码是被主线程执行的!!!!");
     9         //(3)创建线程类的对象
    10         MyThread myThread=new MyThread();
    11         
    12         //(4)启动该线程,该线程启动后会执行run函数
    13         myThread.start();
    14     }
    15 }
    16 //外部类
    17 //利用Thread类来创建线程的步骤:(1)定义一个类继承Thread类
    18 class MyThread extends Thread{
    19 
    20     //(2)重写Thread类中的run方法
    21     @Override
    22     public void run() {
    23         // TODO Auto-generated method stub
    24         for(int i=0;i<10;i++){
    25             System.out.println("这段代码被子进程执行!");
    26             try {
    27                 Thread.sleep(1000);//让当前线程休息一秒
    28             } catch (InterruptedException e) {
    29                 // TODO Auto-generated catch block
    30                 e.printStackTrace();
    31             }
    32         }
    33     }
    34 }

    五.2使用匿名类定义Thread

     1 package runnable;
     2 
     3 public class ThreadDemo {
     4     
     5     //在java中,一个进程至少有一个线程,该线程会执行main函数的代码,执行main函数代码的线程叫主线程
     6     public static void main(String[]args){
     7         
     8         System.out.println("这段代码是被主线程执行的!!!!");
     9         /*//(3)创建线程类的对象
    10         MyThread myThread=new MyThread();
    11         
    12         //(4)启动该线程,该线程启动后会执行run函数
    13         myThread.start();*/
    14         
    15         new Thread(){
    16             public void run() {
    17                 // TODO Auto-generated method stub
    18                 for(int i=0;i<10;i++){
    19                     System.out.println("这段代码被子进程执行!");
    20                     try {
    21                         Thread.sleep(1000);//让当前线程休息一秒
    22                     } catch (InterruptedException e) {
    23                         // TODO Auto-generated catch block
    24                         e.printStackTrace();
    25                     }
    26                 }
    27             }
    28         }.start();
    29     }
    30 }
    31 //外部类
    32 //利用Thread类来创建线程的步骤:(1)定义一个类继承Thread类
    33 /*class MyThread extends Thread{
    34 
    35     //(2)重写Thread类中的run方法
    36     @Override
    37     public void run() {
    38         // TODO Auto-generated method stub
    39         for(int i=0;i<10;i++){
    40             System.out.println("这段代码被子进程执行!");
    41             try {
    42                 Thread.sleep(1000);//让当前线程休息一秒
    43             } catch (InterruptedException e) {
    44                 // TODO Auto-generated catch block
    45                 e.printStackTrace();
    46             }
    47         }
    48     }
    49 }*/

    六.1使用外部类使用Runnable接口

    //??runnable和thread的区别,在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread///类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。
     1 package runnable;
     2 
     3 //??runnable和thread的区别
     4 
     5 public class ThreadDemo1 {
     6     
     7     //在java中,一个进程至少有一个线程,该线程会执行main函数的代码,执行main函数代码的线程叫主线程
     8     public static void main(String[]args){
     9         
    10         System.out.println("这段代码是被主线程执行的!!!!");
    11     
    12         //(3)创建实现了Runnable接口类的对象
    13         MyRunnable myRunnable=new MyRunnable();
    14         
    15         //(4)创建线程对象,并传入myRunnable对象
    16         Thread myThread=new Thread(myRunnable);
    17         
    18         //(5)启动该线程
    19         myThread.start();
    20 
    21     }
    22 }
    23 
    24 //外部类
    25 //利用Runnable接口来创建线程的步骤:(1)定义一个类实现Runnable接口
    26 class MyRunnable implements Runnable{
    27 
    28     //(2)重写Runnable接口中的run方法
    29     @Override
    30     public void run() {
    31         // TODO Auto-generated method stub
    32         for(int i=0;i<10;i++){
    33             System.out.println("这段代码被子进程执行!");
    34             try {
    35                 Thread.sleep(1000);//让当前线程休息一秒
    36             } catch (InterruptedException e) {
    37                 // TODO Auto-generated catch block
    38                 e.printStackTrace();
    39             }
    40         }
    41     }
    42 }

    六.2使用匿名类使用Runnable接口

     1 package runnable;
     2 
     3 //??runnable和thread的区别,在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread///类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。
     4 
     5 public class ThreadDemo1 {
     6     
     7     //在java中,一个进程至少有一个线程,该线程会执行main函数的代码,执行main函数代码的线程叫主线程
     8     public static void main(String[]args){
     9         
    10         System.out.println("这段代码是被主线程执行的!!!!");
    11     
    12         new Thread(new Runnable(){
    13             public void run() {
    14         // TODO Auto-generated method stub
    15                 for(int i=0;i<10;i++){
    16                     System.out.println("这段代码被子进程执行!");
    17                     try {
    18                         Thread.sleep(1000);//让当前线程休息一秒
    19                     } catch (InterruptedException e) {
    20                         // TODO Auto-generated catch block
    21                         e.printStackTrace();
    22                     }
    23                 }
    24             }
    25         }).start();;
    26     }
    27 }
  • 相关阅读:
    找出优先要作的工作
    我要作技术研发了
    确定配色方案
    今天公司搬家
    要作界面原型了
    使用自已的命名空间
    进行审核了
    那里有皮肤软件工开发包的源码???
    发葡萄
    作业务规则挺难
  • 原文地址:https://www.cnblogs.com/liao13160678112/p/6511390.html
Copyright © 2011-2022 走看看