sentence: multithreaded programming and memory visibility multithreaded programs usually use synchronization primitives provided by a high-level programming environment , such as java and .net framework , or an application programming interface ( api ) such as posix threads or windows api .