Java程序测试之线程的同步

package tickect;

class ticketnum implements Runnable
{
    public int tickets = 100;
    String str = new String();
    public void run()
    {
        while(true)
        {
            synchronized(str)
            {
                if (tickets>0)
                {
                    System.out.printf("The Thread: %s is selling the %dth ticket!\n",Thread.currentThread().getName(),tickets);
                    --tickets;
                    try
                    {
                        Thread.sleep(20);
                    }
                    catch(Exception e)
                    {}
                }
                else
                {
                    break;
                }
            }
        }
    }

}

public class Tickect_test {

    public static void main(String [] args)
    {
        ticketnum ticketNum = new ticketnum();
        Thread sellThread1 = new Thread (ticketNum);
        Thread sellThread2 = new Thread (ticketNum);
        sellThread1.start();
        sellThread2.start();
    }
}
时间: 2024-10-08 16:26:57

Java程序测试之线程的同步的相关文章

Java程序测试之线程的使用

package thread_test; class A implements Runnable { public void run() { while(true) { System.out.println("AA"); } } } class B implements Runnable { public void run() { while (true) { System.out.println("BB"); try { Thread.sleep(500); }

java多线程之线程的同步与锁定(转)

一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. publicclass Foo { privateint x = 100; publicint getX() { return x;     } publicint fix(int y) {         x = x - y; return x;     } } publicclass MyRunnable i

Java多线程之线程的同步

Java多线程之线程的同步 实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢? 线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同一个数据时,非常容易出现线程安全问题.具体原因如下:   1,多个线程同时访问一个数据资源(该资源称为临界资源),形成数据发生不一致和不完整.   2,数据的不一致往往是因为一个线程中的多个关联的操作(这几个操作合成原子操作)未全部完成. 关于线程安全问题,有一个经典的情景:银行取钱.代码如下: /

Java并发:线程间同步-条件队列和同步工具类

转载请注明出处: jiq?钦's technical Blog - 季义钦 线程之间的同步,除了互斥(前面介绍的互斥锁)之外,还存在协作关系,下面我们就介绍一下java线程间常见的一些协作方式. 一.内置条件队列 正如每个Java对象都可以作为一个内置锁,每个对象也可以作为一个条件队列,称为内置条件队列,Object.wait().notify()/notifyAll()构成了内置条件队列的API. 需要注意的是,调用任何对象X的内置条件队列的API都必须要先获得该对象X的内置锁. 1.API介

java程序测试之字节流

package filestream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ByteStreamTester { public static void main(String [] args) { FileInputStream in = null

java程序测试之字符流

package filestream; import java.io.FileReader; import java.io.FileWriter; import java.io.FileNotFoundException; import java.io.IOException; public class CharacterStreamTester { public static void main(String [] args) { FileReader in = null; FileWrite

JAVA程序测试之Swing编程

package swingtest; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class HelloApp extends JFrame{ public static void main(String [] args) { SwingUtilities.invokeLater

Java程序员面试题收集(3)

面试中被问到过的题目: 1.<%@ include=""/>和<jsp:include page="" flush="true"/> 2.知道的GOF 模式,说明 3.自己的长期规划是什么,近期规划是什么? 4.override和overload 5.final关键字 6.系统如何分层,前台,逻辑,数据访问.你的职责,代码如何保证质量的 7.getAttribute 和getParameter 区别 8.forward和r

[Java Performance] 线程及同步的性能 - 线程池/ThreadPoolExecutors/ForkJoinPool

线程池和ThreadPoolExecutors 虽然在程序中可以直接使用Thread类型来进行线程操作,但是更多的情况是使用线程池,尤其是在Java EE应用服务器中,一般会使用若干个线程池来处理来自客户端的请求.Java中对于线程池的支持,来自ThreadPoolExecutor.一些应用服务器也确实是使用的ThreadPoolExecutor来实现线程池. 对于线程池的性能调优,最重要的参数就是线程池的大小. 对于任何线程池而言,它们的工作方式几乎都是相同的: 任务被投放到一个队列中(队列的