Java并发笔记(一)

1
public class HelloRunnable implements Runnable {
    
public void run() {
        System.out.println(
"Hello from a thread!");
    }

    
public static void main(String args[]) {
        (
new Thread(new HelloRunnable())).start();
    }

}


2
public class HelloThread extends Thread {

    
public void run() {
        System.out.println(
"Hello from a thread!");
    }

    
public static void main(String args[]) {
        (
new HelloThread()).start();
    }

}


3
public class SleepMessages {
    
public static void main(String args[]) throws InterruptedException {
        String importantInfo[] 
= {
            
"Mares eat oats",
            
"Does eat oats",
            
"Little lambs eat ivy",
            
"A kid will eat ivy too"
        }
;

        
for (int i = 0; i < importantInfo.length; i++{
            
//Pause for 4 seconds
            Thread.sleep(4000);
            
//Print a message
            System.out.println(importantInfo[i]);
        }

    }

}

4
public class SimpleThreads {

    
//Display a message, preceded by the name of the current thread
    static void threadMessage(String message) {
        String threadName 
= Thread.currentThread().getName();
        System.out.format(
"%s: %s%n", threadName, message);
    }

    
private static class MessageLoop implements Runnable {
        
public void run() {
            String importantInfo[] 
= {
                
"Mares eat oats",
                
"Does eat oats",
                
"Little lambs eat ivy",
                
"A kid will eat ivy too"
            }
;
            
try {
                
for (int i = 0; i < importantInfo.length; i++{
                    
//Pause for 4 seconds
                    Thread.sleep(4000);
                    
//Print a message
                    threadMessage(importantInfo[i]);
                }

            }
 catch (InterruptedException e) {
                threadMessage(
"I wasn't done!");
            }

        }

    }


    
public static void main(String args[]) throws InterruptedException {
        
//Delay, in milliseconds before we interrupt MessageLoop
        
//thread (default one hour).
        long patience = 1000 * 60 * 60;
        
//If command line argument present, gives patience in seconds.
        if (args.length > 0{
            
try {
                patience 
= Long.parseLong(args[0]) * 1000;
            }
 catch (NumberFormatException e) {
                System.err.println(
"Argument must be an integer.");
                System.exit(
1);
            }

        }

        threadMessage(
"Starting MessageLoop thread");
        
long startTime = System.currentTimeMillis();
        Thread t 
= new Thread(new MessageLoop());
        t.start();
        threadMessage(
"Waiting for MessageLoop thread to finish");
        
//loop until MessageLoop thread exits
        while (t.isAlive()) {
            threadMessage(
"Still waiting");
            
//Wait maximum of 1 second for MessageLoop thread to
            
//finish.
            t.join(1000);
            
if (((System.currentTimeMillis() - startTime) > patience) &&
                    t.isAlive()) 
{
                threadMessage(
"Tired of waiting!");
                t.interrupt();
                
//Shouldn't be long now -- wait indefinitely
                t.join();
            }

        }

        threadMessage(
"Finally!");
    }

}


5
public class SynchronizedCounter {
    
private int c = 0;
    
public synchronized void increment() {
        c
++;
    }

    
public synchronized void decrement() {
        c
--;
    }

    
public synchronized int value() {
        
return c;
    }

}


public void addName(String name) {
    
synchronized(this{
        lastName 
= name;
        nameCount
++;
    }

    nameList.add(name);
}


public class MsLunch {
    
private long c1 = 0;
    
private long c2 = 0;
    
private Object lock1 = new Object();
    
private Object lock2 = new Object();
    
public void inc1() {
        
synchronized(lock1) {
            c1
++;
        }

    }

    
public void inc2() {
        
synchronized(lock2) {
            c2
++;
        }

    }

}


6
public class Deadlock {
    
static class Friend {
        
private final String name;
        
public Friend(String name) {
            
this.name = name;
        }

        
public String getName() {
            
return this.name;
        }

        
public synchronized void bow(Friend bower) {
            System.out.format(
"%s: %s has bowed to me!%n"
                    
this.name, bower.getName());
            bower.bowBack(
this);
        }

        
public synchronized void bowBack(Friend bower) {
            System.out.format(
"%s: %s has bowed back to me!%n",
                    
this.name, bower.getName());
        }

    }


    
public static void main(String[] args) {
        
final Friend alphonse = new Friend("Alphonse");
        
final Friend gaston = new Friend("Gaston");
        
new Thread(new Runnable() {
            
public void run() { alphonse.bow(gaston); }
        }
).start();
        
new Thread(new Runnable() {
            
public void run() { gaston.bow(alphonse); }
        }
).start();
    }

}

posted on   Phinecos(洞庭散人)  阅读(758)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示